如何从SQL中选择带有或条件和计数的内容?

问题描述

表格:

  • 学生( SNUM:整数,SNAME:STRING,主要:STRING)
  • CLASS( CNAME: STRING,MEETS_AT:STRING,ROOM:STRING,FID:INTEGER)
  • 注册 SNUM: INTEGER, CNAME: STRING)

任务:

查找在R128会议室开会或已招收五名或以上学生的所有班级的名称

您如何编写包含上述两个条件的sql语句?我能够通过两个sql语句来做到这一点:

SELECT CNAME
FROM   ENROLLMENT
GROUP BY CNAME
HAVING COUNT(CNAME) > 5
SELECT CNAME
FROM CLASS
WHERE ROOM = 'R128'

但是如何将它们合并为一条语句?

解决方法

我会在where子句中使用直接过滤来编写此代码:

select cname
from class c
where
    room = 'R128'
    or (select count(*) from enrolled e where e.cname = c.cname) > 5
,

您可以将包含聚合条件的条件与OR运算符一起添加到HAVING子句中:

ЅΕLΕCΤ e.CΝΑΜΕ
  FRΟΜ CLASS c
  JOIN ENROLLMENT e
    ON e.CΝΑΜΕ = c.CΝΑΜΕ
 GRΟՍΡ ΒY e.CΝΑΜΕ
HAVING COUNT(e.CΝΑΜΕ) >= 5 
    OR SUM(CASE WHEN c.ROOM='R128' THEN 1 ELSE 0 END)>0
,
SELECT CNAME
FROM   ENROLLMENT
GROUP BY CNAME
HAVING COUNT(CNAME) > 5 
UNION
SELECT CNAME
FROM CLASS
WΗΕRΕ RΟΟΜ = 'R128'

这样,您可以将2个不同的数据合并在一起