ホームページ >データベース >mysql チュートリアル >ORA-00979: SQL クエリ内の列のグループ化を解決するにはどうすればよいですか?
SQL クエリにおける ORA-00979 の理解と解決
ORA-00979 エラー「GROUP BY 式ではありません」は、SQL クエリで GROUP BY
句が誤って使用されている場合に発生します。 これは、SELECT
ステートメントに GROUP BY
句で言及されていない列が含まれているか、グループ化せずに列に対して集計関数を使用している場合に発生します。
GROUP BY
句は、指定された列内の同一の値を持つ行をグループ化し、集計関数 (SUM
、AVG
、MIN
、MAX
、COUNT
など) で各グループ内のデータを要約できるようにします。 適切にグループ化しないと、データベースは各グループにどの値を関連付けるかを決定できず、エラーが発生します。
例と解決策:
このエラーを引き起こす一般的なシナリオには、複数の列を選択し、サブセットでグループ化するだけであることが含まれます。 データベースは、各グループ内のグループ化されていない列の単一の値を決定できません。
これを修正するには、次のいずれかを行ってください:
すべての非集計列を GROUP BY
句に含めます: これは、選択した列の一意の組み合わせをすべて表示したい場合の最も簡単な解決策です。
グループ化されていない列で集計関数を使用する: 特定の列の概要統計のみが必要な場合は、それらの列に集計関数 (MIN
、MAX
、または AVG
など) を適用します。 これにより、出力がグループごとに 1 行に減ります。
修正されたクエリで説明してみましょう:
<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cr.full_name, MIN(TO_CHAR(cf.fact_date, 'mm/dd/yyyy')) AS appt, -- Using MIN to aggregate the date 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, cr.full_name, cs.cs_id, cr.tracking_number -- All non-aggregated columns are now included ORDER BY cs.cs_id, cr.full_name;</code>
すべての非集計列を GROUP BY
句に正しく含めることで、クエリは ORA-00979 エラーなしで実行され、データの整合性が確保され、期待どおりの結果が得られます。 データ分析のニーズに最も適したアプローチ (すべての列を含む、または集計関数の使用) を必ず選択してください。
以上がORA-00979: SQL クエリ内の列のグループ化を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。