mysql - 如何计算 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 ....
这给了我基于来源的生日日期,我首先从a
if exists else from b
else 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 中获取它,所以在计数时我想将它计为而不是在.a
b
a
b
如何在 MySQL 中进行这样的记录计数?
解决方案
只需添加一个简单的 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
这将为您提供首选来源。您可以在计数时按此表达式分组(它会给您三行而不是三列)。
推荐阅读
- go - 如何以编程方式检索声明给定类型的包路径?
- javascript - Javascript - 孩子阻止父母被点击
- typescript - Typescript drop unknown[] 还是从不?
- jquery - 关于 CSS 边距宽度 JQuery
- javascript - 如何通过javascript在document.getElementById中输入更多方法
- angular - 如何在 Angular 中使用 stylemode 在高图表的进度条中应用颜色渐变
- java - RestAssured:验证实体的创建
- android - 在片段中使用 OnNewIntent 方法
- wpf - Wpf Material Design 日期时间选择器
- sql - BigQuery:为什么在添加“LEFT JOIN”后我会获得更多行?