在同一SQL查询中使用WHERE、HAVING和GROUP BY



我正在查找在R128房间会面的所有班级的名称,或者在这两个名为"注册"one_answers"班级"的表中有五名或五名以上学生注册的所有班级。我可以单独找到这个问题的两个部分,但我不明白如何在一个查询中同时找到它们。

这给了我在R128房间里想要的课程:

SELECT class.cname
FROM enroll RIGHT JOIN class ON enroll.cname=class.cname
WHERE room='R128';

这给了我5名或5名以上学生的课程:

SELECT class.cname
FROM enroll RIGHT JOIN class ON enroll.cname=class.cname
GROUP BY enroll.cname
HAVING COUNT(enroll.cname)>4;

我不知道如何将它们组合成一个查询。到目前为止,这是我所拥有的,但它返回了一个空集:

SELECT class.cname, COUNT(enroll.cname)
FROM enroll RIGHT JOIN class ON enroll.cname=class.cname
WHERE room='R128'
GROUP BY enroll.cname
HAVING COUNT(enroll.cname)>4;

这是班表和注册表

R128室的课程包括专利法、数据结构、印加考古、奶牛群管理和数学导论。有5名或5名以上学生的课程是数据库系统和操作系统设计。

这会产生您想要的结果吗?

select c.cname
from class c
inner join enroll e on e.cname = c.cname
group by c.cname
having max(room = 'R128') = 1 or count(*) > 4

假设roomclass中,我建议union:

select c.cname
from class c
where room = 'R128'
union   -- on purpose to remove duplicates
select e.cname
from enroll e
group by e.cname
having count(*) >= 5;

最新更新