gpt4 book ai didi

mysql - 萨基拉 BD 练习

转载 作者:行者123 更新时间:2023-11-29 15:22:48 25 4
gpt4 key购买 nike

我正在尝试在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com