首页 > 解决方案 > 如何计算 Mysql 中数据的来源

问题描述

考虑以下数据:

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

这给了我基于来源的生日日期,我首先从aif exists else from belse from 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 中获取它,所以在计数时我想将它计为而不是在.abab

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

标签: mysqlsql

解决方案


只需添加一个简单的 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

这将为您提供首选来源。您可以在计数时按此表达式分组(它会给您三行而不是三列)。


推荐阅读