我需要在sakila数据库中找到电影的最长租借期。我有这个尝试:
SELECT DISTINCT customer.first_name FROM rental, customer WHERE rental.customer_id = customer.customer_id GROUP BY rental.rental_id HAVING ( rental.return_date - rental.rental_date ) =( SELECT MAX(countRental) FROM ( SELECT ( rental.return_date - rental.rental_date ) AS countRental FROM rental, customer GROUP BY rental.rental_id ) AS t1 )
但我得到了错误:
有人知道为什么吗?我使用了应该是汇总数据的列..我缺少什么
如文档中所写
SQL标准要求HAVING必须仅引用GROUP BY子句中的列或聚合函数中使用的列。但是,MySQL支持对此行为的扩展,并允许HAVING引用SELECT列表中的列以及外部子查询中的列。
您必须在select子句中指定return_date和rental_date。
有两种选择:
SELECT DISTINCT customer.first_name, rental.return_date, rental.rental_date FROM rental, customer WHERE rental.customer_id = customer.customer_id GROUP BY rental.rental_id HAVING ( rental.return_date - rental.rental_date ) =( ...
要么
SELECT DISTINCT customer.first_name, (rental.return_date - rental.rental_date) as rental_duration FROM rental, customer WHERE rental.customer_id = customer.customer_id GROUP BY rental.rental_id HAVING rental_duration =( ...
两者都应该工作正常。