single
HAVING句
メニューを表示するにはスワイプしてください
学校情報システムのデータ一貫性と正確性を確保するための見直しが行われています。 この見直しの一環として、新たなデータ分析タスクが割り当てられました。
定期的なチェックの際、一部の生徒記録に複数の成績エントリが含まれていることが判明しました。本来、このシステムは生徒ごとに1つの成績のみを保存する設計です。
このようなケースを特定し、さらなる内部調査のために抽出することが求められています。
どのようにこれを実現できるかを一緒に考えてみましょう。WHERE句を使って実現できるかもしれません。例えば、次のような形になります。
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
しかし、ご覧の通り、エラーが発生し、WHERE句内で集約関数を使用できないことが示されています。この場合に必要となるのがHAVING句です。
従業員の平均給与が年間70,000ドル未満の部門を取得したいとします。
これを実現するには、集約関数とHAVING句を使用します。
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
HAVING句を使用して、データをグループ化した列に条件を設定し、1つの部門のみが返されました。
HAVING句内でデータ集約を使用するには、クエリ内でデータのグループ化が必要です。上記のクエリのように、department列でデータをグループ化しています。
HAVING句のより一般的な構文と、その最適な使用タイミングについて確認します。
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
WHERE句とHAVING句の主な違いと、それぞれを使用するタイミングについて簡単に説明します。
WHERE句はデータ集計前に使用し、HAVING句はデータ集計後に使用します。WHERE句はGROUP BYの前に記述し、HAVING句はGROUP BYの後に記述します。
これらがHAVING句を正しく使うために覚えておくべき2つの主な違いです。それでは、学校から与えられた課題に戻りましょう。
スワイプしてコーディングを開始
成績記録に同じ学生が複数回登場している場合があり、これはシステム内に重複または予期しないエントリが存在することを示しています。
複数の成績エントリを持つ学生の姓のみを取得してください。 この結果は、学校管理者がデータを確認し、必要に応じて修正するために使用されます。
この条件を満たす姓のリストのみをアルファベット順で返してください。
簡単な手順
student_surname列を取得student_surnameでデータをグループ化HAVING句を使い、COUNT(grade) > 1で結果を絞り込みstudent_surnameで結果をソート
解答
フィードバックありがとうございます!
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください