我正在尝试在 Sakila 数据库中开发 SQL (MySQL) 功能。我对以下问题有疑问:每个类别和每年的平均电影租赁时间是多少?
这是我到目前为止的查询:
select avg(r.return_date - r.rental_date) as avgDate, c.name
from
rental r, category c
inner join inventory i
on i.inventory_id = r.inventory_id
inner join film f
on f.film_id=i.film_id
group by c.name
order by avgDate desc;
错误如下:
Error Code: 1054. Unknown column 'r.inventory_id' in 'on clause'.
我知道今年的部分仍然缺失,但我正在努力解决这个问题。有人可以帮助我吗?
谢谢!!
最佳答案
不要混合隐式连接和显式连接。显式连接比隐式连接具有更高的优先级,因此首先对它们进行评估,这会导致您收到错误。事实上,始终使用显式连接。
此外,您还需要引入 junction table film_category
将电影与类别联系起来。
这是您的新 from
子句:
from
rental r
inner join inventory i on i.inventory_id = r.inventory_id
inner join film f on f.film_id = i.film_id
inner join film_category fc on fc.fim_id = f.fim_id
inner join category c on c.category_id = fc.category_id
查询中的另一个问题是日期算术。 MySQL 中不能将两个日期相减。您可以使用 timestampdiff()
来实现此目的。假设您想要以分钟为单位的日期之间的差异,则:timestampdiff(month, r.rental_date, r.return_date)
。
您的最终查询:
select
c.name,
avg(timestampdiff(minute, r.rental_date, r.return_date)) avg_rental_duration
from
rental r
inner join inventory i on i.inventory_id = r.inventory_id
inner join film f on f.film_id = i.film_id
inner join film_category fc on fc.fim_id = f.fim_id
inner join category c on c.category_id = fc.category_id
group by c.category_id, c.name
关于mysql - 萨基拉 BD 练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59276452/