Mysql Sakila BD练习
我试图在Sakila数据库中开发我的SQL(MySQL)功能。我对以下问题有疑问:每个类别和每年的平均电影租赁时间是多少 以下是我目前的疑问: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
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