簡體   English   中英

查看滿足條件的次數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM