请考虑以下数据:
userid a.birthday b.birthday c.birthday
12 2017-01-01 2017-01-01 NULL
13 2016-01-12 2016-01-12 2016-01-12
14 NULL 2017-04-05 NULL
我有以下查询:
select COALESCE(a.birthday,b.birthday,c.birthday) as birthday
from ....
这给我基于来源的生日日期,如果从a
到b
,则我从c
取生日。查询的输出是:
birthday
-------
2017-01-01 #from a.birthday
2016-01-12 #from a.birthday
2017-04-05 #from b.birthday
count(3)
我想知道的是知道为该查询选择的生日日期的来源。
所以我真正想看到的是:
a b c
-------
2 1 0
请注意,仅对表进行计数是无法完成的。
虽然userid=12
在查询中的a
和b
中都列出了生日,但我从a中获取了生日,因此在计数时我想将其计为a
,而不是b
。
如何在MySQL中进行这种记录计数?
答案 0 :(得分:2)
只需添加一个简单的case表达式:
SELECT CASE WHEN a.birthday IS NOT NULL THEN 'a'
WHEN b.birthday IS NOT NULL THEN 'b'
WHEN c.birthday IS NOT NULL THEN 'c' END AS src
这将为您提供首选来源。您可以在计算时按此表达式分组(它将为您提供三行而不是三列)。
答案 1 :(得分:1)
select
-- a is not null
count(a.birthdate) as a
-- a is null
,count(case when a.birthdate is null then b.birthdate end) as b
-- a and b are both null
,count(case when coalesce(a.birthdate,b.birthdate) is null then c.birthdate end) as c
from tab