我想知道你们中是否有人可以帮我解决下面的SQL查询:MM
表: student_name,score,group,is_candidate
学生和小组的关系是:学生只能在一个小组中,一个小组可以有多个学生。学生可以是候选人,也可以不是候选人。
我想列出其学生可能会或可能不会成为候选人的所有小组,并且还希望列出每个小组的最大(分数),而最大(分数)应仅计入候选人的学生。特别是,一个小组可以让所有学生都不是候选人,在这种情况下,max(分数)应该只是一个默认值(比如0)。
示例:
student_A1, 90, group_A, true
student_A2, 92, group_A, true
student_A3, 95, group_A, false
student_B1, 85, group_B, false
student_B2, 65, group_B, false
student_B3, 75, group_B, false
student_C1, 91, group_C, true
预期结果是:
group_A, 92
group_B, 0
group_C, 91
我的问题是,如果可以在单个查询中执行此操作而无需将表连接到自身来执行嵌套查询吗?
答案 0 :(得分:1)
您可以使用CASE
来计算候选人数;
SELECT "group",
MAX(CASE WHEN "is_candidate"='true' THEN "score" ELSE 0 END) max_score
FROM "mytable"
GROUP BY "group";