Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ HAVING句 | Grouping
中級SQL
セクション 1.  6
single

single

bookHAVING句

メニューを表示するにはスワイプしてください

学校情報システムのデータ一貫性と正確性を確保するための見直しが行われています。 この見直しの一環として、新たなデータ分析タスクが割り当てられました。

定期的なチェックの際、一部の生徒記録に複数の成績エントリが含まれていることが判明しました。本来、このシステムは生徒ごとに1つの成績のみを保存する設計です。

このようなケースを特定し、さらなる内部調査のために抽出することが求められています。

どのようにこれを実現できるかを一緒に考えてみましょう。WHERE句を使って実現できるかもしれません。例えば、次のような形になります。

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

しかし、ご覧の通り、エラーが発生し、WHERE句内で集約関数を使用できないことが示されています。この場合に必要となるのがHAVING句です。

従業員の平均給与年間70,000ドル未満部門を取得したいとします。 これを実現するには、集約関数とHAVING句を使用します。

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

HAVING句を使用して、データをグループ化した列に条件を設定し、1つの部門のみが返されました。

Note
注意

HAVING句内でデータ集約を使用するには、クエリ内でデータのグループ化が必要です。上記のクエリのように、department列でデータをグループ化しています。

HAVING句のより一般的な構文と、その最適な使用タイミングについて確認します。

SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

WHERE句とHAVING句の主な違いと、それぞれを使用するタイミングについて簡単に説明します。

  1. WHERE句はデータ集計に使用し、HAVING句はデータ集計に使用します。
  2. WHERE句はGROUP BYに記述し、HAVING句はGROUP BYに記述します。

これらがHAVING句を正しく使うために覚えておくべき2つの主な違いです。それでは、学校から与えられた課題に戻りましょう。

タスク

スワイプしてコーディングを開始

成績記録に同じ学生が複数回登場している場合があり、これはシステム内に重複または予期しないエントリが存在することを示しています。

複数の成績エントリを持つ学生の姓のみを取得してください。 この結果は、学校管理者がデータを確認し、必要に応じて修正するために使用されます。

この条件を満たす姓のリストのみをアルファベット順で返してください。

簡単な手順

  • student_surname列を取得
  • student_surnameでデータをグループ化
  • HAVING句を使い、COUNT(grade) > 1で結果を絞り込み
  • student_surnameで結果をソート

解答

Switch to desktop実践的な練習のためにデスクトップに切り替える下記のオプションのいずれかを利用して、現在の場所から続行する
すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  6
single

single

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

some-alt