[英]SQL Query to count occurrences of each distinct value
我有一個包含2個字段的表: userid和value 。 可以有多個具有相同userid的行 。 值列可以是5個不同值之一。
我想為每個userid輸出一個摘要行,並計算每個不同值出現在輸入中的次數。 也就是說,摘要行包含以下列: userid , 值1的 計數,值2的 計數,值3的 計數,值4的 計數和值5的計數
例
1,4
1,3
2,1
3,5
4,1
5,2
輸出將是
1,0,0,1,1,0
2,1,0,0,0,0
3,0,0,0,0,5
4,1,0,0,0,0
5,0,1,0,0,0
有什么建議么?
select userid,
sum(case value when 1 then [occurs] else 0 end) as countOf1,
sum(case value when 2 then [occurs] else 0 end) as countOf2,
sum(case value when 3 then [occurs] else 0 end) as countOf3,
sum(case value when 4 then [occurs] else 0 end) as countOf4,
sum(case value when 5 then [occurs] else 0 end) as countOf5
from
(
select userid, [value], count(*) as [occurs]
from inputTable
group by userid, [value]
) t
group by userid
order by userid
從您的問題中我收集到相同的輸入行值可能會出現多次,盡管您的示例數據沒有顯示這種可能性。 但是,如果每個不同的行只能出現一次,則可以使用更簡單/更短的解決方案。
您聲明輸入中的[值]列可以是5個不同值之一。 我的解決方案基於該“要求”。 它為每個不同的值包括一行代碼。 但是,如果不同值的數量可以隨時間增長或不受限制,則將需要使用動態SQL的其他方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.