ホームページ >データベース >mysql チュートリアル >ORA-00979: SQL クエリ内の列のグループ化を解決するにはどうすればよいですか?

ORA-00979: SQL クエリ内の列のグループ化を解決するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-24 04:52:09726ブラウズ

How to Resolve ORA-00979: Grouping Columns in SQL Queries?

SQL クエリにおける ORA-00979 の理解と解決

ORA-00979 エラー「GROUP BY 式ではありません」は、SQL クエリで GROUP BY 句が誤って使用されている場合に発生します。 これは、SELECT ステートメントに GROUP BY 句で言及されていない列が含まれているか、グループ化せずに列に対して集計関数を使用している場合に発生します。

GROUP BY 句は、指定された列内の同一の値を持つ行をグループ化し、集計関数 (SUMAVGMINMAXCOUNT など) で各グループ内のデータを要約できるようにします。 適切にグループ化しないと、データベースは各グループにどの値を関連付けるかを決定できず、エラーが発生します。

例と解決策:

このエラーを引き起こす一般的なシナリオには、複数の列を選択し、サブセットでグループ化するだけであることが含まれます。 データベースは、各グループ内のグループ化されていない列の単一の値を決定できません。

これを修正するには、次のいずれかを行ってください:

  1. すべての非集計列を GROUP BY 句に含めます: これは、選択した列の一意の組み合わせをすべて表示したい場合の最も簡単な解決策です。

  2. グループ化されていない列で集計関数を使用する: 特定の列の概要統計のみが必要な場合は、それらの列に集計関数 (MINMAX、または 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 サイトの他の関連記事を参照してください。

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