我正在努力找到这个练习的解决方案.

database

exercise

很遗憾,我无法直接附上我的图片,很抱歉我可能会出现链接和其他错误.

SELECT L0.RoomID,
       COUNT(*),
       MAX(AttendingStudent#)
FROM   LECTURE L0
WHERE  L0.RoomID IN(
  SELECT L1.RoomID
  FROM   CLASSROOM C, LECTURE L1
  WHERE  C.RoomID = L1.RoomID 
  AND C.Video_Kit = 'yes' 
  AND L1.Date >= 01/01/2014 
  AND Date <= 31/12/2014
  GROUP BY L1.RoomID
  HAVING COUNT(DISTINCT L1.CCode) >= 20
)
AND Date >= 01/10/2014 
AND Date <= 31/10/2014
GROUP BY L0.RoomID, L0.Date, L0.StartHour

推荐答案

您拥有大部分部件,但只需以正确的方式将它们组合在一起即可.

如果您将问题分解为多个部分,可能更容易思考:

对于有视频工具包的教室... Select 教室的代码

SELECT roomid
FROM   classroom
WHERE  video_kit = 'yes'

2014年全年至少举办了20门不同的课程

SELECT roomid
FROM   classroom
WHERE  video_kit = 'yes'
AND    roomid IN (
         SELECT roomid
         FROM   lecture
         WHERE  "Date" >= DATE '2014-01-01'
         AND    "Date" <  DATE '2015-01-01'
         GROUP BY roomid
         HAVING COUNT(DISTINCT ccode) >= 20
       )

Select 2014年10月提供的讲座总数

SELECT roomid,
       ( SELECT COUNT(*)
         FROM   lecture l
         WHERE  c.roomid = l.roomid
         AND    "Date" >= DATE '2014-10-01'
         AND    "Date" <  DATE '2014-11-01'
       ) AS num_lectures
FROM   classroom c
WHERE  video_kit = 'yes'
AND    roomid IN (
         SELECT roomid
         FROM   lecture
         WHERE  "Date" >= DATE '2014-01-01'
         AND    "Date" <  DATE '2015-01-01'
         GROUP BY roomid
         HAVING COUNT(DISTINCT ccode) >= 20
       )

Select 参加此类讲座的最大学生人数.

SELECT roomid,
       ( SELECT COUNT(*)
         FROM   lecture l
         WHERE  c.roomid = l.roomid
         AND    "Date" >= DATE '2014-10-01'
         AND    "Date" <  DATE '2014-11-01'
       ) AS num_lectures,
       ( SELECT MAX(AttendingStudent#)
         FROM   lecture l
         WHERE  c.roomid = l.roomid
         AND    "Date" >= DATE '2014-10-01'
         AND    "Date" <  DATE '2014-11-01'
       ) AS max_attending_students
FROM   classroom c
WHERE  video_kit = 'yes'
AND    roomid IN (
         SELECT roomid
         FROM   lecture
         WHERE  "Date" >= DATE '2014-01-01'
         AND    "Date" <  DATE '2015-01-01'
         GROUP BY roomid
         HAVING COUNT(DISTINCT ccode) >= 20
       )

现在,有更有效的方法使用连接条件来编写最后两部分,但是,由于这是一个家庭作业(job)问题,我将让您探索这一点,并提出自己更好的解决方案.

Sql相关问答推荐

如何将多个 Select 查询从一个表中组合出来

Postgresql -如何计算刷卡和刷卡时间

表名数组

如何在case语句中使用条件来计算成对变量

使用来自不同深度的嵌套组的值执行计算的干净方法?

计算分段的总权重

Ffltter&;Dart SQL Lite包:是否可以在一个查询中执行多条更新语句(每次执行不同的WHERE参数)

使用SQL数据库中的现有列派生或修改几个列

按属性值 Select 数组元素Postgres Jsonb

PostgreSQL-按距离阈值挤压相邻行的性能

使用 union 的有序结果获取行数

用替代方案替换 SQL Cursor 以提高性能

错误:postgresql 中缺少表评级的 FROM 子句条目

SQL:无重复项的两个聚合函数

比使用NOT EXISTS更高效的SQL删除方法是什么?

所有列分组的简写?

使用 GROUP BY 时如何创建其他组?

在 postgresql 中保存带有时间戳的几何类型数据

Athena:从字符串birth_dt列计算年龄

Select 随机行,使得列子组的组合是唯一的