如何比较具有相同ID但其他属性不同的值?

时间:2020-08-31 22:17:05

标签: mysql sql group-by sum having-clause

responsive

小白在这里

我想查找给定ID的数字在字母为A时小于字母B时的所有实例。例如,当ID为1时,A的数字为23而B的数字为45.由于23 <45,因此符合条件,我想返回ID 1以及两个数字的总和(23 + 45)。 ID = 2无效,因为37不少于24。ID = 3也无效,因为它没有带字母B的条目。

1 个答案:

答案 0 :(得分:0)

having子句中使用条件聚合:

select id, sum(number) number_total
from mytable
where letter in ('A', 'B')
group by id
having min(case when letter = 'A' then number end) < min(case when letter = 'B' then number end) 

这假设(id, letter)元组在表中是唯一的。否则,您可能希望使用SUM()而不是MIN()

如果您还想显示这些值,则MySQL允许您在having子句中使用别名:

select 
    id, 
    sum(number) number_total,
    min(case when letter = 'A' then number end) number_a,
    min(case when letter = 'B' then number end) number_b
from mytable
where letter in ('A', 'B')
group by id
having number_a < number_b