集計関数を使用せずに GROUP BY を使用する場合、Oracle がどのように動作するかを理解し、次のような問題が発生しないようにすることが重要です。 「GROUP BY 式ではありません」 error.
GROUP BY は、指定された列の同じ値を持つ行をグループ化し、単一の結果行を生成します。ただし、グループ化値の一意の組み合わせを識別するには、集計関数に現れない列を GROUP BY 句に含める必要があります。
次の表を考えてみましょう:
EMP +-------+------+------+ | EmpNo | EName | Sal | +-------+------+------+ | 7839 | King | 5000 | | 7698 | Blake | 2850 | | 7782 | Clark | 2450 | +-------+------+------+
例1:
SELECT EName, Sal FROM EMP GROUP BY EName, Sal
結果:
+------+------+ | EName | Sal | +------+------+ | King | 5000 | | Blake | 2850 | | Clark | 2450 | +------+------+
このクエリは行を正しくグループ化し、グループ化列 (EName と Sal) 以降のすべての行を返します。 ) match.
例2:
SELECT EName, Sal FROM EMP GROUP BY EName
結果:
ORA-00979: not a GROUP BY expression
Sal が GROUP BY 句に含まれていないため、このクエリは失敗します。 Oracle は、同じ EName の異なる Sal 値を持つ複数の行を集計する方法を知りません。
例 3:
SELECT EName, Sal FROM EMP GROUP BY Sal
結果:
ORA-00979: not a GROUP BY expression
EName が GROUP に含まれていないため、このクエリも失敗しますBY句。 Oracle は、各一意の Sal 値にどの EName を関連付けるかを知る必要があります。
例 4:
SELECT EmpNo, EName, Sal FROM EMP GROUP BY Sal, EName
結果:
ORA-00979: not a GROUP BY expression
選択列 (EmpNo、EName、Sal) の数が次の数を超えているため、このクエリは失敗します。 GROUP BY 句の列 (Sal、EName)。 Oracle では、一意の組み合わせを考慮して、選択した列がグループ化の一部である必要があります。
例 5:
SELECT EmpNo, EName, Sal FROM EMP GROUP BY EmpNo, EName, Sal
結果:
+-------+------+------+ | EmpNo | EName | Sal | +-------+------+------+ | 7839 | King | 5000 | | 7698 | Blake | 2850 | | 7782 | Clark | 2450 | +-------+------+------+
選択されたすべての列が GROUP BY 句に含まれているため、このクエリは成功します。 Oracle は、EmpNo、EName、Sal の一意の組み合わせをそれぞれ考慮し、3 つの異なる行を作成します。
以上がOracle GROUP BY クエリが「GROUP BY 式ではありません」エラーを返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。