Sakila db SQL 查找租借>10部恐怖片的客户

Posted

技术标签:

【中文标题】Sakila db SQL 查找租借>10部恐怖片的客户【英文标题】:Sakila db SQL find customers who have rented >10 horror movies 【发布时间】:2013-03-05 20:31:05 【问题描述】:

我完全专注于我的家庭作业。我正在使用 Sakila 示例数据库。我应该写一个查询,它会给我一个所有租借了超过 10 部恐怖电影的客户的列表。这是我目前所拥有的:

select CONCAT(c.first_name, " ", c.last_name) AS "Customer name", 
FROM customer AS c

INNER JOIN rental AS r
ON c.customer_id = r.customer_id

inner join  inventory as i
on i.inventory_id = r.inventory_id

inner join  film_category as fc
on i.film_id = fc.film_id
 inner join 
(select * from category as ca
where ca.name = 'horror') as h
 on h.category_id = fc.category_id 
 ;

我可以得到它返回所有(846)个租了恐怖片的客户,但是我如何只得到那些租了10部以上恐怖片的客户呢?我知道我需要 COUNT 函数,但是当我把它放进去时,它给了我 1 个人,计数为 846,这是一个人数,而不是租借的恐怖电影。在这一点上,我的逻辑只是让我失望。请帮忙!

【问题讨论】:

除了COUNT,您还需要使用GROUP BY,这样您就可以按客户和HAVING 分离结果,以便只获得具有>10 的结果 @darkajax - 请不要添加作业标签,此标签已过时,正在被删除。有关更多信息,请参阅 Meta 上的this 问题。 @Mike 知道了,抱歉不会再这样做了... 【参考方案1】:

很遗憾,我不知道有问题的示例数据库,但我认为这不会影响我的回答。

如果您想使用 COUNT,您还需要使用 GROUP BY 来实现聚合计数。

您还可以查看带有HAVING 子句的GOUP BY。

【讨论】:

【参考方案2】:

如果有人需要便餐:

SELECT R.customer_id, COUNT(*) AS cnt 
FROM sakila.rental R LEFT JOIN sakila.inventory I ON R.inventory_id = I.inventory_id 
LEFT JOIN sakila.film F ON I.film_id = F.film_id 
LEFT JOIN sakila.film_category FC on F.film_id = FC.film_id 
LEFT JOIN sakila.category C ON FC.category_id = C.category_id 
WHERE C.name = "Horror" 
GROUP BY R.customer_id HAVING cnt > 10

【讨论】:

【参考方案3】:

您也可以编写没有左连接/内连接的查询。请注意,没有任何客户拥有超过 10 次恐怖片出租,因此空白结果不会让您感到困惑(尝试 2 次即可!)

SELECT cu.first_name, cu.last_name, COUNT(r.rental_id) as horror_film_count
FROM customer AS cu, rental AS r, inventory as i, film as f, category as ca, 
film_category as fc
WHERE cu.customer_id = r.customer_id 
AND r.inventory_id = i.inventory_id
AND i.film_id = f.film_id
AND f.film_id = fc.film_id
AND fc.category_id = ca.category_id
AND ca.category_id = 11
GROUP BY cu.customer_id
HAVING horror_film_count > 10

【讨论】:

以上是关于Sakila db SQL 查找租借>10部恐怖片的客户的主要内容,如果未能解决你的问题,请参考以下文章

为每个客户 X 写一个查询,另一个客户 Y 与 X 租了至少一部电影

MySQL-创建示例数据库(sakila)

为 Sakila 数据仓库创建 Actor 维度

DB--基础SQL--DCL

MySQL 示例数据库sakila-db的安装

mysqldump常用导出方式