集計関数を使用しない GROUP BY について
SQL では、GROUP BY ステートメントは、指定された列に基づいてテーブル内の行をグループ化するために使用されます。集計関数を使用せずに GROUP BY を使用する場合、その動作方法と必要な条件を理解することが重要です。
次の例を考えてみましょう。
SELECT ename, sal FROM emp GROUP BY ename, sal;
このクエリは行を返しません。集計関数を使用しない GROUP BY のルールに違反しています:
この場合、SELECT リストには 2 つの列 (ename、sal) があります。 、ただし、GROUP BY 句には 3 つ (ename、sal、sal) があります。これを修正するには、GROUP BY 句から 1 つの sal 列を削除します:
SELECT ename, sal FROM emp GROUP BY ename;
SELECT リストに sal を含めると、GROUP BY 句にないため、非 GROUP BY 列になります。これは集計関数ではないため、ORA-00979 エラーが発生します。
これを修正するには、GROUP BY 句に sal を追加するか、集計関数を使用する必要があります:
-- Add sal to the GROUP BY clause SELECT ename, MIN(sal), MAX(sal) FROM emp GROUP BY ename, sal; -- Use an aggregate function on sal SELECT ename, SUM(sal) FROM emp GROUP BY ename;
ルールの背後にある推論
GROUP BY 操作はマージされますGROUP BY 列に同一の値を持つ行を作成し、一意の値セットごとに 1 つの行を生成します。集計関数を使用せずに SELECT リストに GROUP BY 以外の列を含めると、各グループの代表値を選択する方法が不明瞭になるため、あいまいさが生じます。
たとえば、Name 列と Age 列を含むテーブルがあり、GROUP を実行するとします。名前ごとに、各名前の結果にどの年齢を表示する必要がありますか? MIN、MAX、SUM などの集計関数を使用すると、そのような列の処理方法を明示的に指定できます。
以上がSQL の GROUP BY 句は集計関数なしでどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。