演習課題「結果を絞り込もう 1」
bookstore データベースの sales テーブルから、書籍ごとの売り上げ総額が600ドル以上の書籍を取得してください。
書籍IDは book_id カラムに、売り上げ金額は amount カラムに格納されています。
演習課題「結果を絞り込もう 2」
bookstore データベースの sales テーブルから、2020年の書籍ごとの売り上げ総額が400ドル以上の書籍を取得してください。
書籍IDは book_id カラムに、売り上げ日時は sales_date カラムに、売り上げ金額は amount カラムに格納されています。
#06:結果を絞り込む (HAVING句)
このチャプターでは、HAVING句を使って、グループ化した後の結果を絞り込む方法を学習します。
SQLでは基本的に日時はセットで扱います。
もし、日にちのみを指定し、時刻を指定しなかった場合は、その日付の00:00:00(.000)を指定したものとして扱うというルールがあります。
今回の動画のSQL文、SELECT customer_id, SUM(amount)
FROM payment
WHERE payment_date BETWEEN '2005-07-01' AND '2005-07-31'
GROUP BY customer_id
HAVING SUM(amount) >= 40;
では「2005-07-01 00:00:00」以降「2005-07-31 00:00:00」以前の顧客ごとの支払い額について集計をおこなってしまっており、7月31日の00:00:00より後の顧客ごとの支払い額が集計されていません。
「2005-07-01 00:00:00」以降「2005-07-31 23:59:59」以前の顧客ごとの支払い額を集計するSQLを書くには、payment_dateの絞り込みに日にちだけでなく時刻も記述する必要があります。
この点を修正したSQL文は次のようになります。SELECT book_id, SUM(amount)
FROM sales
WHERE sales_date BETWEEN '2020-01-01 00:00:00' AND '2020-12-31 23:59:59'
GROUP BY book_id
HAVING SUM(amount) >= 400;