[英]See how many times condition met
我有一個表(stu_grades),用於存儲學生數據及其成績。
我想找出例如該表中的每個學生獲得“ A”然后是“ B”等的次數。
我該怎么做呢? 我的感覺是要用完嗎? 通過我無法構造查詢。
stu_grades
stu_ID|grade1|grade2|Grade3
1 A A C
2 B B B
3 C C A
1 C A C
同一名學生在同一等級甚至不同等級的表中可能出現多次。
我特別想檢查成績出現過3次以上的地方
因此,最終輸出應為:
Stu_ID|Grade|Count
1 A 3
1 C 3
2 B 3
3 C 2
3 A 1
使用Group BY
依據:
SELECT stu_ID, Grade, GradeCount
FROM stu_grades
LEFT OUTER JOIN
(
SELECT Grade, COUNT(Grade) GradeCount
FROM stu_grades
GROUP BY Grade
)tb
ON tb.Grade= stu_grades.Grade
您可以使用GROUP BY和HAVING子句解決此問題
SELECT grade, COUNT(grade) FROM stu_grades GROUP BY grade HAVING COUNT(grade) > 3
您提到想要每個學生每個年級的成績計數。 您將需要按stu_id和等級進行分組。
SELECT stu_id, grade, COUNT(grade) GradeCount
FROM stu_grades
GROUP BY stu_id, grade
HAVING COUNT(grade) > 3
1)規范化您的數據:
select stu_id, grade
from stu_grades, unnest(array[grade1, grade2, grade3]) as g(grade);
2)現在很容易:
select stu_id, grade, count(*)
from stu_grades, unnest(array[grade1, grade2, grade3]) as g(grade)
group by 1, 2 order by 1, 2;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.