mysql - 查询 SQL - Sakila BD

标签 mysql sql

我在创建一些查询时遇到问题。 我正在使用 Sakila DB。我正在尝试创建一个新列,其中包含每个客户的延迟次数,使用“count ((datediff (rental.rental_date,rental.return_date))> film.rental_duration as n”...

归还电影延迟最严重的前 10 位客户是哪些。

Select customer.first_name, customer.last_name, count ((datediff (rental.rental_date, rental.return_date))> film.rental_duration as nTime
From customer,film,rental,inventory  
Where customer.customer_id=rental.customer_id  
and rental.inventory_id=inventory.inventory_id   
and (datediff (rental.rental_date,rental.return_date)) > film.rental_duration
limit 10;

我做错了什么?

谢谢!!

最佳答案

我做了一些假设,但这应该非常接近你想要的:

select c.customer_id, count(*)
from 
    customer c
    inner join rental r 
        on r.customer_id = c.customer_id 
    inner join film f
        on f.film_id = r.film_id
        and (datediff (r.rental_date, r.return_date)) > f.rental_duration           
group by c.customer_id
order by count(*) desc
limit 10;

您的查询存在问题:

  • 缺少聚合;您需要按客户对记录进行分组,以便可以计算每个客户发生了多少次逾期租金返回

  • 它缺少 film 表的连接条件;我假设 film 通过列 film_id

  • rental 相关
  • 如果您使用标准的显式连接而不是老式的隐式连接,那么上一个问题会更容易发现;这是您应该始终使用标准联接的众多原因之一

  • 正如 Thorsten Kettner 所评论的,inventory 表在此查询中似乎是多余的:其他 3 个表包含您需要的所有信息

关于mysql - 查询 SQL - Sakila BD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59226077/

相关文章:

MySQL授予用户文件权限

sql - 无法插入显式值,因为 IDENTITY_INSERT 为 OFF,但无法将 IDENTITY_INSERT 设置为 ON,因为它已为 ON

sql - 如何重现 “Cannot drop database because it is currently in use” ?

sql - DB2 SQL : How to 'count' the amount of records returned by a having clause

sql - 识别sql server中携带特定字符串的存储过程和触发器

mysql - 如何在 Azure 中为 MySql 启用 ipv6 连接

mysql - 将文本文件导入 MySQL WorkBench。语法错误

mysql - 使用全连接但不使用左连接时出现问题。为什么?

mysql - 在表中设置一个字段,用于存储两个外键相关的数据,并编号

php - 在数组中使用 join 和 push 结果