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