Query
計算sql中不同的記錄數
我有一個表,其中一個是事件 ID,第二個是學校 ID,第三個是遊戲 ID 我想用唯一的遊戲 ID 計算參加過該活動的學校數量(一所學校可以參加多個不同遊戲的活動)
例子
Event Id school ID Game ID 1 20 1 3 21 2 1 22 3 2 22 4 3 21 5 1 20 6
我需要的輸出是
Event Id schoolCount 1 2 3 1 2 1
只需使用簡單且標準化
GROUP BY
的COUNT(DISTINCT ..)
CREATE TABLE foo(a,b,c) AS VALUES ( 1, 20, 1 ), ( 3, 21, 2 ), ( 1, 22, 3 ), ( 2, 22, 4 ), ( 3, 21, 5 ), ( 1, 20, 6 ); SELECT a, COUNT(DISTINCT b) FROM foo GROUP BY a;
我不知道我是否明白。
您想計算有多少學校參加了一項活動,包括同一所學校是否參加了同一活動,但如果比賽相同,則不計算同一所學校…
dba=# select * from events; event_id | school_id | game_id ----------+-----------+--------- 1 | 20 | 1 3 | 21 | 2 1 | 22 | 3 2 | 22 | 4 3 | 21 | 5 1 | 20 | 6 2 | 20 | 1 5 | 20 | 1 1 | 20 | 9 1 | 20 | 9 ->do not count that one
然後你想得到:
select event_id, count(school_id) from ( select event_id, count(school_id) as school_id from events group by event_id,game_id ) as q group by event_id; event_id | count ----------+------- 1 | 4 5 | 1 3 | 2 2 | 2
我對嗎?如果正確,請選擇正確答案。