ホームページ >データベース >mysql チュートリアル >SQL の GROUP BY 句は集計関数なしでどのように機能しますか?

SQL の GROUP BY 句は集計関数なしでどのように機能しますか?

DDD
DDDオリジナル
2024-12-25 22:29:09989ブラウズ

How Does SQL's GROUP BY Clause Work Without Aggregate Functions?

集計関数を使用しない GROUP BY について

SQL では、GROUP BY ステートメントは、指定された列に基づいてテーブル内の行をグループ化するために使用されます。集計関数を使用せずに GROUP BY を使用する場合、その動作方法と必要な条件を理解することが重要です。

次の例を考えてみましょう。

SELECT ename, sal
FROM emp
GROUP BY ename, sal;

このクエリは行を返しません。集計関数を使用しない GROUP BY のルールに違反しています:

  • Number of Columns SELECT リスト: SELECT リストの列の数は、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 リスト内の非 GROUP BY 列: 非 GROUP BY 列のみ含めることができます。定数であるか、集計する引数として現れる場合は、SELECT リスト内でfunction.

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 サイトの他の関連記事を参照してください。

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