繁体   English   中英

如何创建一个SQL选择,该选择将创建一个范围的所有数据并计算出现次数

[英]How to create a SQL select that creates all data for a range and counts occurences

我想将数据收集在一个表中,该表具有记录在特定日期发生事件的记录,并创建具有完整日期范围数据的输出,其中包含每个日期每个人的事件数。

例如,如果我有一个包含这样的数据的Source表:

neil 01-05-2015
john 02-05-2015
neil 01-05-2015
neil 02-05-2015
jane 03-05-2015

第二个表包含所有日期:

01-05-2015
02-05-2015
03-05-2015
04-05-2015

如何合并它们以创建所需的输出?

neil 01-05-2015 2
neil 02-05-2015 1
neil 03-05-2015 0
neil 04-05-2015 0
john 01-05-2015 0
john 02-05-2015 1
john 03-05-2015 0
john 04-05-2015 0
jane 01-05-2015 0
jane 02-05-2015 0
jane 03-05-2015 1
jane 04-05-2015 0

我尝试了各种完全连接,但似乎没有什么能真正满足我的需要,我想知道仅在SQL中是否有可能。

使用CROSS JOIN首先在日期和人物之间进行完整的乘积CROSS JOIN 然后使用LEFT JOIN来计算所有匹配项。

SELECT s1.name, d.date, IFNULL(COUNT(s2.name), 0)
FROM Dates AS d
CROSS JOIN (SELECT DISTINCT name FROM Source) AS s1
LEFT JOIN Source AS s2 ON s1.name = s2.name AND d.date = s2.date
GROUP BY s1.name, d.date

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM