在 mariadb 中获取合并数据
Posted
技术标签:
【中文标题】在 mariadb 中获取合并数据【英文标题】:Getting Merged Datas in mariadb 【发布时间】:2021-03-02 12:09:16 【问题描述】:我正在尝试合并 mariadb 中的数据。 我只想获取结果不佳的数据
首先你应该看看我建立的查询
如果变成好的数据,有3个查询用于比较
当回合为1并且结果为好时,下回合不可能变成坏的。 这种情况下一轮的结果总是好或为空
和
当轮数为1且结果为坏时,下一轮可以变成好坏和NULL
和
下一轮,如果结果为null,仍然是不好的结果。
SELECT name,result,round FROM my_table WHERE round = 1
╔══════╦════════╦═══════╗
║ name ║ result ║ round ║
╠══════╬════════╬═══════╣
║ A ║ bad ║ 1 ║
║ B ║ bad ║ 1 ║
║ C ║ bad ║ 1 ║
║ D ║ good ║ 1 ║
╚══════╩════════╩═══════╝
SELECT name,result,round FROM my_table WHERE round = 2
╔══════╦════════╦═══════╗
║ name ║ result ║ round ║
╠══════╬════════╬═══════╣
║ A ║ NULL ║ 2 ║
║ B ║ NULL ║ 2 ║
║ C ║ good ║ 2 ║
║ D ║ NULL ║ 2 ║
╚══════╩════════╩═══════╝
SELECT name,result,round FROM my_table WHERE round = 3
╔══════╦════════╦═══════╗
║ name ║ result ║ round ║
╠══════╬════════╬═══════╣
║ A ║ NULL ║ 3 ║
║ B ║ good ║ 3 ║
║ C ║ good ║ 3 ║
║ D ║ NULL ║ 3 ║
╚══════╩════════╩═══════╝
我想得到这样的结果:
╔══════╦════════╦═══════╗
║ name ║ result ║ round ║
╠══════╬════════╬═══════╣
║ A ║ bad ║ 3 ║
╚══════╩════════╩═══════╝
我的意思是我可以这样搜索
SELECT name,result,round FROM my_table WHERE type = 3(last round) and result = 'bad'
但你知道它是否为null,我必须找到它的上一轮结果。
然后我要再次请求查询,如果它再次有NULL作为结果,我必须请求上一轮的查询。它会重复。我认为这不是一个好主意。
如果你能理解我需要什么以及我应该怎么做,请告诉我更好的想法或解决方案
【问题讨论】:
为您的表提供 CREATE TABLE 和 INSERT INTO 数据匹配显示的输出。 PS。输出 2 和 3 与查询不匹配(输出列表中的type
但输出表中的 round
)。
@Akina 哦对不起我编辑了它
【参考方案1】:
您希望最近的非 NULL 结果是坏的。您可以使用聚合
select name
from t
group by name
having max(case when result is not null then round end) = max(case when result = 'Bad' then round end)
having
子句正在获取最近一轮的结果。它将最近一轮与“坏”结果进行比较。如果它们相等,则名称为“Bad”。
另一种方法是使用窗口函数:
select t.*
from (select t.*,
row_number() over (partition by name order by round desc) as seqnum
from test t
where result is not null
) t
where seqnum = 1 and result = 'Bad';
【讨论】:
【参考方案2】:看起来像
SELECT name, `bad` result, 3 round
FROM table
GROUP BY name
HAVING SUM(CASE WHEN round = 1 AND result = 'bad' THEN 1 END)
AND !SUM(CASE WHEN round IN (2,3) AND result = 'good' END)
【讨论】:
以上是关于在 mariadb 中获取合并数据的主要内容,如果未能解决你的问题,请参考以下文章