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

问题描述

responsive

小白在这里

我想查找给定ID的数字在字母为A时小于字母B时的所有实例。例如,当ID为1时,A的数字为23而B的数字为45.由于23

解决方法

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