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を指定する必要があります。
次の2つのオプションがあります。
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 =(
...
両方とも問題なく動作するはずです。