SQL-对于每个id,计算一列中有多少条目大于另一列



假设我有一个表"results",如下所示:

student | score | passing_grade
1 | 50 | 70
1 | 30 | 50
2 | 90 | 50
2 | 80 | 100

我想统计每个学生通过了多少次考试。结果如下:

student | passed
1 | 0
2 | 1

解释:学生1没有通过任何一项测试,而根据第二栏和第三栏的条件,学生2通过了2项测试中的1项。

我不知道这是否有什么不同,但我通过将两个表合并在一起创建了结果。我尝试使用WHERE子句来查找分数>通过交易,但我不知道方向是否正确。我也尝试过计数(当分数>passing_grade THEN 1 ELSE 0 END时的情况),但我不确定我做得是否正确,因为这对每一行都很重要。

这是一个简单的SQL查询。我建议在发布问题之前先阅读SQL基础知识并尝试一下。但由于你是这里的新贡献者(欢迎加入),包括可能有帮助的查询:

SELECT
student,
count(*) as passed
FROM results
WHERE 
score > passing_grade
GROUP BY
student
;

您的COUNT逻辑基本上是正确的,除了ELSE非空值导致每条记录都算作一条。COUNT函数只忽略null,因此ELSE值应为null或ELSE应完全省略:

SELECT student, COUNT(CASE WHEN score > passing_grade THEN 1 END) AS passed
FROM results
GROUP BY student;

请注意,MySQL支持直接求和布尔表达式,因此我们可以更严格地执行上面的操作:

SELECT student, SUM(score > passing_grade) AS passed
FROM results
GROUP BY student;
SELECT C.STUDENT,
SUM(
CASE
WHEN C.SCORE>=C.PASSING_GRADE THEN 1
ELSE 0
END
)AS PASSED
FROM RESULTS AS C
GROUP BY C.STUDENT

相同的逻辑,但具有SUM功能

最新更新