我一直在查询中遇到一些困难。我有两个表(略不相关的数据):需要关于SQL查询的帮助
学生(SID,职业),其中的职业生涯或者是 “ugrd” 或 “GRD”,
的memberOf(studentid,组名)
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”学生的团体的查询,但是我不确定如何去比较每个团队中的本科生的数量和毕业生的数量,并选择更多的毕业生。
到目前为止,我已经尝试使用计数函数,但一直无法找出一种方法来处理它的方式,可以回答问题。我真的很想了解如何获得我需要的结果以及它的工作原理。如果有人能帮忙,我会很感激。谢谢。
您不能使用'WHERE'条款履行GRD/UGRD过滤器的要求,因为你不直到分组后才知道聚合值,但是可以使用'HAVING'子句:'HAVING SUM(CASE WHEN CAREER ='GRD'THEN 1 ELSE 0 END)> SUM(CASE WHEN CAREER ='UGRD'THEN 1 ELSE 0 END)'。 (我会失去所有的双引号,但是如果它们包含在内,那么列名和表名必须与定义匹配;而列值周围的双引号应该是单引号)。 – 2011-05-01 22:11:22
你应该提到,最后可以添加'HAVING Grads> UGrads'子句(而不是'WHERE')。 – 2011-05-01 22:47:06
@亚历山大我知道在我输入时引用感觉不对,谢谢。剩下的问题是如何解决的。固定提及要去哪里。谢谢,它已经使用了一段时间了。 – 2011-05-02 02:01:13