簡體   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