mysql Sakila db SQL查找租赁超过10部恐怖电影的客户

t8e9dugd  于 2022-12-17  发布在  Mysql
关注(0)|答案(3)|浏览(131)

我完全被我的家庭作业困住了。我正在使用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的计数,这是一个人的计数,不是租来的恐怖片。我的逻辑在这一点上失败了。请帮帮我!

pxiryf3j

pxiryf3j1#

不幸的是,我不知道所讨论的示例数据库。但是,我觉得这不会影响我对这个问题的回答。
如果要使用COUNT,还需要使用GROUP BY来实现聚合计数。
您还可以使用HAVING子句查看GROUP BY

z5btuh9x

z5btuh9x2#

如果有人需要简单的食物:

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
xdnvmnnf

xdnvmnnf3#

您也可以编写一个不带左连接/内连接的查询。注意,没有客户拥有超过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

相关问题