【问题标题】:How can I get the desired results from the Sakila database using SQL如何使用 SQL 从 Sakila 数据库中获得所需的结果
【发布时间】:2021-04-13 19:00:42
【问题描述】:

我需要:找出演员总数高于平均水平的电影。返回按标题排序的电影名称及其演员人数。重要说明:此查询应返回许多电影。仅显示前 10 个结果。

我为此使用 mySQL 工作台,并在 Sakila 数据库上执行查询。

[附图]

到目前为止我的代码是:

SELECT film.title, COUNT(film_actor.actor_id) AS actor_count
FROM film_actor
INNER JOIN film ON film_actor.film_id=film.film_id
GROUP BY film.film_id
HAVING COUNT(film_actor.actor_id) >
AVG(film_actor.actor_id)
ORDER BY film.title

【问题讨论】:

  • 一方面,不要使用AVG(film_actor.actor_id)。这将为您提供演员实体 ID 的平均值,而不是每部电影的平均演员人数
  • sakila db 可在此处下载:Other MySQL Documentation(仅供需要知道在哪里找到它的人)
  • 您查询中的[ 来自哪里?

标签: mysql sql database


【解决方案1】:
with cte as(
SELECT film.film_id,film.title, COUNT(film_actor.actor_id) AS actor_count
FROM film_actor
INNER JOIN film ON film_actor.film_id=film.film_id
GROUP BY film.film_id,film.title
)
select cte.title,cte.actor_count from 
cte where cte.actor_count>(select avg(actor_count) from cte)
order by cte.title limit 0,10

【讨论】:

  • ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 '[SELECT film.film_id,film.title, COUNT(film_actor.actor_id) AS actor_count FROM ' 附近使用正确的语法
  • 而且,删除 [ 后,它不会返回前 10 名。而是按标题名称的字母顺序排列的前 10 名.....
  • @Luuk 您在前 10 名结果中的假设是因为根据问题,它只需要按电影名称排序的前 10 名结果。
  • 好吧,我一定忽略了这一点,因为按名称返回前 10 名的电影的演员数量超过平均水平有点奇怪......事实上这个问题听起来喜欢家庭作业.....
猜你喜欢
  • 2016-08-02
  • 2014-09-09
  • 1970-01-01
  • 2015-11-30
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
相关资源
最近更新 更多