ホームページ >データベース >mysql チュートリアル >SQL クエリで ORA-00979 エラーが発生するのはなぜですか? それを修正するにはどうすればよいですか?
ORA-00979 のトラブルシューティング: 一般的な SQL GROUP BY の問題
SQL の GROUP BY
句を使用しているときに、恐ろしい ORA-00979 エラーが頻繁に発生します。 このエラーは、選択された列とグループ化された列の間に不一致があることを示します。 具体的には、SELECT
ステートメントに GROUP BY
句に存在しない列が含まれている場合、またはグループ化されていない列に非集計関数が適用されている場合に発生します。
<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cr.full_name, tolist(to_char(cf.fact_date, 'mm/dd/yyyy')) "appt", cs.cs_id, cr.tracking_number FROM review cr, cs, fact cf WHERE cr.cs_sk = cs.cs_sk AND UPPER(cs.cs_id) LIKE '%' || UPPER(i_cs_id) || '%' AND row_delete_date_time IS NULL AND cr.review_sk = cf.review_wk(+) AND cr.fact_type_code (+) = 183050 GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number ORDER BY cs.cs_id, cr.full_name;</code>
句が不完全であるため、このクエリは ORA-00979 をトリガーします。 これを修正するには、GROUP BY
リストの すべて 個の非集計列を SELECT
句に含めるか、集計関数 (GROUP BY
、COUNT
、SUM
、、MIN
) を明示的にグループ化されていない列に追加します。MAX
AVG
修正版は次のとおりです:
重要な変更点は、
<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cr.full_name, to_char(cf.fact_date, 'mm/dd/yyyy') "appt", cs.cs_id, cr.tracking_number FROM review cr, cs, fact cf WHERE cr.cs_sk = cs.cs_sk AND UPPER(cs.cs_id) LIKE '%' || UPPER(i_cs_id) || '%' AND row_delete_date_time IS NULL AND cr.review_sk = cf.review_wk(+) AND cr.fact_type_code (+) = 183050 GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number, cr.full_name, cs.cs_id ORDER BY cs.cs_id, cr.full_name;</code>句に
と cr.full_name
を追加することです。 あるいは、cs.cs_id
と GROUP BY
の集計結果のみが必要な場合は、cr.full_name
ステートメントで適切な集計関数を使用する必要があります。 cs.cs_id
リスト内のすべての列が集計されるか、SELECT
句に含まれるようにすることで、ORA-00979 エラーが解消されます。 SELECT
関数は集計関数ではないため、この関数を削除すると問題の解決にも役立ちます。GROUP BY
以上がSQL クエリで ORA-00979 エラーが発生するのはなぜですか? それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。