ホームページ >データベース >mysql チュートリアル >SQL クエリで「ORA-00979: GROUP BY 式ではありません」が生成されるのはなぜですか?

SQL クエリで「ORA-00979: GROUP BY 式ではありません」が生成されるのはなぜですか?

DDD
DDDオリジナル
2025-01-24 04:32:09521ブラウズ

Why Does My SQL Query Generate ORA-00979: Not a GROUP BY Expression?

SQL の GROUP BY 句の ORA-00979 エラーをデコードする

この一般的な SQL エラー ORA-00979 (「GROUP BY 式ではありません」) は、クエリで GROUP BY が使用されているが、SELECT リストにグループ化も集計もされていない列が含まれている場合に発生します。 これを修正する方法を見てみましょう。

核心的な問題は、SELECT 節と GROUP BY 節の不一致にあります。 GROUP BY は、値が一致する行をグループに統合します。 SELECT ステートメント内のすべての列は、次のいずれかを行う必要があります。

  1. GROUP BY 句に表示されます: これにより、選択された各値がグループに直接関連付けられるようになります。
  2. 集計する: MIN()MAX()SUM()AVG()COUNT() などの関数を使用して、各グループ内の値を集計します。

具体例

予定が入ったテーブルを想像してください:

Appointment ID (appt_id) Patient Name (patient) Doctor (doctor)
1 Alice Dr. Smith
2 Bob Dr. Smith
3 Charlie Dr. Jones

間違ったクエリ:

<code class="language-sql">SELECT appt_id, patient, doctor FROM appointments GROUP BY doctor;</code>

appt_idpatient がグループ化されていないため、これは ORA-00979 で失敗します。

正しいアプローチ

  • すべての非集計列を GROUP BY に含めます:
<code class="language-sql">SELECT doctor, COUNT(*) FROM appointments GROUP BY doctor;</code>

これは医師ごとの予約をカウントします。

  • 集計関数を使用します:
<code class="language-sql">SELECT doctor, COUNT(*) AS appointment_count, MIN(appt_id) AS first_appointment FROM appointments GROUP BY doctor;</code>

これは予約をカウントし、医師ごとの最小予約 ID を見つけます。

重要なのは、グループ化基準と選択したデータの間の一貫した関係を確保することです。 集計関数を使用すると、グループ内のデータを要約して、ORA-00979 エラーを回避できます。

以上がSQL クエリで「ORA-00979: GROUP BY 式ではありません」が生成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。