2016-11-30 203 views
1

我有一個表(stu_grades),存儲學生數據,並在中心他們的成績,他們參加數條件滿足

我想找出例如有多少次該表中每個學生拿到「A」,然後「B」等在任何中心

stu_grades

stu_ID|grade1|grade2|Grade3|center 
    1  A  A  C 1 
    2  B  B  B 2 
    3  C  C  A 1 
    1  C  A  C 2 

同學生可以用相同的等級,甚至不同等級多次出現在表,相同或不同的中心

我特別要檢查這裏的檔次已經出現超過3次以上,他們在

多少centeres存在,因此最終的輸出應該是這樣的:

Stu_ID|Grade|Count|centercount 
1  A  3  2 (As they accquired 'A' from 2 centres) 
1  C  3  2 
2  B  3  1 (As they only exist in 1 centre) 
3  C  2  1 
3  A  1  1 
+0

爲什麼3分不同等級列? – jarlh

+0

@jarlh 3個不同的主題 – healthiq

回答

1
select 
    stu_id, 
    grade, 
    sum(count) count, 
    count(distinct center) centercount 
from (
    select stu_id, grade, center, count(*) 
    from stu_grades, 
    lateral unnest(array[grade1, grade2, grade3]) grade 
    group by 1, 2, 3 
    ) s 
group by 1, 2 
order by 1, 2; 

Test it here.

+0

作品魅力..謝謝你的 – healthiq