集計関数を使用しないグループ化: メカニズムを理解する
GROUP BY は、次のデータに基づいてデータをグループ化して要約できる強力な SQL 句です。指定された列。 SUM、COUNT、AVG などの集計関数は通常、GROUP BY とともに使用されますが、集計関数を使用せずに GROUP BY を使用することもできます。この概念を理解することは、GROUP BY の機能を最大限に活用するために重要です。
集計関数なしで GROUP BY を使用する場合、各グループの出力が 1 行になることを理解することが重要です。 GROUP BY 句に含まれていない列の値は、グループ内のすべての行に事実上複製されます。
EMP テーブルについて考えてみましょう:
ename | sal -------+------ Smith | 1000 Jones | 1200 Davis | 1100 Wilson | 1200 Brown | 1300
シナリオ 1: 無効な GROUP BY 式
SELECT ename, sal FROM emp GROUP BY ename, sal;
このクエリはエラーで失敗しますORA-00979 sal が GROUP BY 句に含まれていないため。すべての行の sal の値が異なるため、従業員ごとに複数の行が作成されます。
シナリオ 2: 有効な GROUP BY 式
SELECT ename, sal FROM emp GROUP BY ename;
このクエリは有効ですこれは、行を名前ごとにグループ化し、各従業員に対して一意の行を確保するためです。 sal の値は、同じ従業員に属する行ごとに重複します。
シナリオ 3: 無効な GROUP BY 式
SELECT ename, sal FROM emp GROUP BY sal;
このクエリは、次の理由により無効です。行を sal でグループ化しようとします。その結果、同じ従業員に対して複数の行が作成されます。給与.
シナリオ 4: 無効な GROUP BY 式
SELECT empno, ename, sal FROM emp GROUP BY sal, ename;
GROUP BY 句の列の順序は列の順序と一致する必要があるため、このクエリは無効ですSELECT 句内。
シナリオ 5: 有効な GROUP BY 式
SELECT empno, ename, sal FROM emp GROUP BY empno, ename, sal;
GROUP BY 句の列の順序が SELECT 句の列の順序と一致するため、このクエリは有効です。結果には、empno、ename、sal の個別の組み合わせごとに 1 つの行が含まれます。
要約すると、集計関数を使用しない GROUP BY は、同じ値を共有する行をグループ化することで、指定された列から重複を削除します。ただし、GROUP BY 句に含まれていないすべての列の出力行には重複した値が含まれます。
以上がSQL の集計関数なしで GROUP BY はどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。