看看条件达到了多少次

时间:2016-11-18 13:28:34

标签: sql postgresql

我有一张表(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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你可以使用GROUP BY和HAVING Clause解决这个问题

  SELECT grade, COUNT(grade) FROM stu_grades GROUP BY grade HAVING COUNT(grade) > 3

答案 2 :(得分:0)

您提到您希望每个学生每个年级的成绩。您需要按stu_id和等级进行分组。

  SELECT stu_id, grade, COUNT(grade) GradeCount
  FROM stu_grades
  GROUP BY stu_id, grade
  HAVING COUNT(grade) > 3

答案 3 :(得分:0)

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;