![](/img/trans.png)
[英]SQL INSERT INTO SELECT and Return the SELECT data to Create Row View Counts
[英]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.