【发布时间】:2020-09-09 11:36:00
【问题描述】:
我需要为学生提供结果。
我有一个 MySQL 查询给出学生列表,然后我使用 SELECT 子查询根据不同的学生活动从几个不同的表中给出结果。
对于一个子查询,我需要一个可以使用 CASE 语句计算的总分,但是这是根据所有结果计算的,我需要它基于每次测试的最佳结果,因为学生经常重复测试以获得更好的成绩结果。
GROUP BY 不适用于 SELECT 子查询。
我认为 DISTINCT 将是我的解决方案,但我不确定是否可以在一个字段 (TestID) 上执行 DISTINCT,同时将 CASE 语句基于不同的字段(百分比),尽管我认为它需要是 MAX(百分比) 如果那是可能的。
我看到了类似的例子,但它们似乎涉及使用“Then”来给出 DISTINCT 字段,而我的例子是使用“Then”来提供分数。
我已将 SQL 简化为下面的问题子查询,该子查询会产生结果,但没有根据每个 TestID 的最佳百分比制作“测试点”:
SELECT Students.UserID, Students.Name,
(SELECT COALESCE(SUM(Case When percentage >= '90' Then '2'
When percentage < '90' AND percentage > '0' Then '1'
Else '0'
END),0)
FROM TestResults
WHERE Students.UserID = TestResults.UserID) AS testpoints
FROM Students
ORDER BY testpoints DESC
学生桌是这样的:
UserID Name
1 David
2 Daisy
3 Sheila
TestResults 是这样的:
ID UserID TestID percentage
1 1 1 100
2 1 2 100
3 2 1 100
4 2 1 80
5 2 2 100
6 3 2 100
上面的查询提供了这个结果,它计算了同一测试的多次尝试:
UserID Name testpoints
1 David 4
2 Daisy 3
3 Sheila 4
我想要得到的是删除重复项和基于每个测试的最大百分比的分数:
UserID Name testpoints
1 David 4
2 Daisy 2
3 Sheila 2
如果有人可以帮助我,我将非常感激......
【问题讨论】:
标签: mysql sql join group-by sum