首页 > 解决方案 > 查找具有特殊条件的数据库中的字段数

问题描述

我的问题是:如果我有带有 student_id 和其他字段(无关紧要)的表格学生和带有三个字段的表格考试:student_id、subject_id(来自另一个表格主题的 ID)和考试标记。

我需要找出每个科目考试成绩相同的学生人数。

我一直坚持这项任务,你可以让我知道我该如何做或解释完整的解决方案。

简单数据:

在此处输入图像描述

对于这种情况,查询必须返回 count(student_id) = 4

标签: sqlpostgresql

解决方案


您需要嵌套聚合:

select count(*)
from
 (
   select student_id
   from tab
   group by student_id
   -- same min and max means only one value exists
   having min(exam_mark) = max(exam_mark)
 ) as dt

最小值/最大值通常比 更有效COUNT(DISTINCT exam_mark) = 1

如果您只希望学生拥有多个分数,请增强 HAVING 与

    AND count(*) > 1

推荐阅读