Query

計算sql中不同的記錄數

  • October 31, 2018

我有一個表,其中一個是事件 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 BYCOUNT(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

我對嗎?如果正確,請選擇正確答案。

引用自:https://dba.stackexchange.com/questions/218548