如何计算Mysql中数据的基础来源

时间:2019-01-01 12:40:24

标签: mysql sql

请考虑以下数据:

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 ....

这给我基于来源的生日日期,如果从ab,则我从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在查询中的ab中都列出了生日,但我从a中获取了生日,因此在计数时我想将其计为a,而不是b

如何在MySQL中进行这种记录计数?

2 个答案:

答案 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