Mysql Sakila BD练习

Mysql Sakila BD练习,mysql,sql,join,Mysql,Sql,Join,我试图在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

我试图在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;
错误如下:

错误代码:1054。“on子句”中的未知列“r.inventory\u id”

我知道这一年的部分时间还没有到,但我正在努力解决这个问题。有人能帮我吗


谢谢

不要混合隐式连接和显式连接。显式联接比隐式联接具有更高的预条件,因此首先对它们求值,这将导致您得到的错误。事实上,始终使用显式联接

另外,你需要把一部电影与一个类别联系起来

这是您的新
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(分钟,r.rental\u date,r.return\u 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