我查询时遇到了一些困难。我所拥有的是两个表(省略了相关数据):
学生(SID,职业),职业是“ugrd”或“grd”,
memberof(studentid,groupname)
SELECT "GROUPNAME" FROM "MEMBEROF"
INNER JOIN "STUDENT" //to get rid of students not in a group
ON "SID" = "STUDENTID"
GROUP BY "GROUPNAME" //so that no duplicates are listed
这是我迄今为止工作的代码,但它只列出了包含学生的组。我需要一个查询,可以列出比“UGRD”更多“GRD”学生的小组,但我不确定如何比较每个小组中的本科生与毕业生的数量,以及选择更多毕业生的小组。
到目前为止,我已尝试使用count函数,但无法找到一种方法来操作它以解决问题的方式。我真的想了解如何获得我需要的结果以及它是如何工作的。如果有人可以提供帮助,我真的很感激。感谢。
答案 0 :(得分:2)
这应该给你没有学生的团体,以及毕业生和本科生的数量。 (我将内部更改为左连接)。总和的想法来自Matthew Jones,所以如果这对你有帮助,请给他一个向上投票。然后,您可以在Grads和UGrads列上执行having子句。
SELECT "GROUPNAME",
SUM(CASE WHEN career= 'grd' THEN 1 ELSE 0 END) AS 'Grads',
SUM(CASE WHEN career = 'ugrd' THEN 1 ELSE 0 END) AS 'UGrads'
FROM "MEMBEROF"
LEFT JOIN "STUDENT" //to get rid of students not in a group, but keep groups with no students
ON "SID" = "STUDENTID"
GROUP BY "GROUPNAME" //so that no duplicates are listed
HAVING Grads > UGrads
编辑:根据评论修正。
答案 1 :(得分:0)
HAVING条件可以写成:
HAVING SUM(CASE WHEN CAREER = 'GRD' THEN 1 ELSE 0 END)
> SUM(CASE WHEN CAREER = 'UGRD' THEN 1 ELSE 0 END)
或者像这样:
HAVING SUM(CASE WHEN CAREER = 'GRD'
THEN 1
WHEN CAREER = 'UGRD'
THEN -1
ELSE 0 END)
> 0