0
我有一個包含用戶ID和他們的行動(條目是不同的)SQL:一列的組合+計數
用戶ID源表|行動
1 A 1 B 2 A 3 B 3 C
,我需要與誰進行兩個動作的用戶數量獲得的兩個動作都組合在一起。
action1 | action2 |用戶
A A 2 A B 1 (A C 0) B B 2 B C 1 C C 1
- A-C的數量是在括號,因爲我不需要在含有0個用戶的輸出行。
- 包含兩次相同操作(A-A)的行只存儲執行該操作的用戶數。 (用戶1和用戶2執行的動作A,這是2個用戶)
我試圖加入源表本身,而是因爲它包含了比行的百萬,我跑出來的閥芯空間:
SELECT sT1.action, sT2.action, count(distinct sT1.userID)
FROM sourceTable sT1
JOIN sourceTable sT2 ON (sT1.userID=sT2.userID)
GROUP BY 1,2
HAVING sT1.action <= sT2.action
輸出本身不應該太大,因爲大多數組合不會存在(0個用戶同時執行這兩個操作)。 有沒有更有效的方式來查詢我需要什麼?
預先感謝您。
我不知道這是否會解決它,但它看起來非常複雜:D –
感謝您的回覆! 我不能做RowID <> RowID,因爲我也需要連接到自己的行。在WHERE子句中使用動作<=動作有所幫助,看起來這比在HAVING部分做得更好。除此之外,您的查詢看起來與我的非常相似。 我希望有一個不使用連接的解決方案,但也許這是不可能的。 – user3177113
您必須使用加入。在世界上沒有一個嚴肅的問題沒有 - 加入沒有任何問題! –