我在MySql 5.6.25中使用Sakila数据库。
第一个问题给了我提供我们"商店"收入最高的按降序排列。我还会显示租用的时间和租金率:
SELECT f.title, f.rental_rate, count(r.rental_id) AS "Times Rented", count(r.rental_id) * f.rental_rate as Revenue
from film f
INNER JOIN inventory i
ON f.film_id = i.film_id
INNER JOIN rental r
ON r.inventory_id = i.inventory_id
GROUP BY f.title
ORDER BY revenue DESC
第二个问题是向我们展示我们手头有多少部电影:
SELECT film.title, count(inventory.film_id)
from film
INNER JOIN inventory
ON film.film_id = inventory.film_id
group by film.title
我理解这两个查询是如何独立工作的...但是当我尝试将它们组合起来时,它们会产生意想不到的结果。请告诉我合并它们的正确方法,而不改变显示结果的方式。
答案 0 :(得分:2)
对于那些不知道的人来说,mysql附带了一个很棒的练习数据库调用 sakila 来练习查询。
SELECT f.title,
f.rental_rate,
count(r.rental_id) AS "Times Rented",
count(r.rental_id) * f.rental_rate as Revenue,
(select count(*) from inventory where film_id=f.film_id) as InvCount
from film f
INNER JOIN inventory i
ON f.film_id = i.film_id
INNER JOIN rental r
ON r.inventory_id = i.inventory_id
GROUP BY f.title
ORDER BY revenue DESC
这将为你提供第一行的InvCount = 8(电影BUCKET BROTHERHOOD)。
count(i.film_id) as InvCount
是因为alias i
由其在整个查询中的别名rental r
上的最后一次加入驱动。
所以对于第一排产品,BUCKET BROTHERHOOD,有34个租赁和8个实际库存的物品....
如果您以错误的方式执行此操作,则显示InvCount = 34。正确的答案是8。
始终对数据进行健全性检查,以防止老板对你大吼大叫。
select film_id,title from film where title like 'bucket br%'; -- film_id=103
select count(*) from inventory where film_id=103; -- count=8