【发布时间】:2021-04-24 12:03:23
【问题描述】:
我一般对 SQL 和数据库比较陌生,你能解释一下我在这里做错了什么吗?我正在尝试在我的作业中为 Netflix 实现一个数据库。 这是详细信息表的架构:
我想列出所有最新的电影。 Content_ID 是分配给内容表中每个电影/节目的编号。我这样写了我的查询:
您能解释一下正确的方法吗?
【问题讨论】:
-
您的问题完全不清楚。 “电影”与您展示的数据有什么关系?
我一般对 SQL 和数据库比较陌生,你能解释一下我在这里做错了什么吗?我正在尝试在我的作业中为 Netflix 实现一个数据库。 这是详细信息表的架构:
我想列出所有最新的电影。 Content_ID 是分配给内容表中每个电影/节目的编号。我这样写了我的查询:
您能解释一下正确的方法吗?
【问题讨论】:
不能将 Group 函数与 where 子句一起使用。
您想在分组之前过滤行使用 where 谓词,如果您想过滤掉由 group by 子句创建的组,请使用 Have 子句。
SELECT CONTENT_ID
FROM DETAILS
WHERE DATE_ADDED = ( SELECT MAX(DATE_ADDED) FROM DETAILS)
GROUP BY CONTEN_ID
Where 子句仅使用谓词限制从表中获取的行,它不适用于一组行,这就是您收到此错误的原因。
ORA - 00934: group function is not allowed here.
但是如果你想在你的谓词中聚合数据,那么使用子查询就像
WHERE date_added = ( scalar subquery returning single row of date_added)
或
WHERE date_added IN (multiple-row subquery return date_added)
如果你想在使用 group by 子句后过滤掉组,那么 使用有。
SELECT department_id, MAX(salary) FROM employees
GROUP BY department_id
HAVING MAX(salary) > 5000;
【讨论】: