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つを試してチャットを始めてください