SQL の GROUP BY
句: 詳細
SQL の GROUP BY
句は、指定された列に基づいて行をグループ化し、グループ化されたデータの集計計算 (SUM
、COUNT
、AVG
など) を可能にする強力なツールです。 集約関数を使用した場合と使用しない場合の動作を調べてみましょう。
GROUP BY
集計関数なし: 落とし穴
集計関数なしで GROUP BY
を使用すると、エラーが発生します。 次の例を考えてみましょう:
<code class="language-sql">SELECT * FROM order_details GROUP BY order_no</code>
GROUP BY
では、SELECT
リスト内のすべての非集計列も GROUP BY
句に含める必要があるため、これは失敗します。 *
ワイルドカードはすべての列を選択します。データベースは各 order_no
グループ内のグループ化されていない列にどの値を返すかを決定できないため、クエリがあいまいになります。
GROUP BY
集計関数を使用する: 解決策
この問題は、集計関数を使用すると解決されます。 集計関数はグループ全体に対して動作し、クエリで意味のある結果を生成できるようにします。 たとえば、各注文の合計価格を計算します:
<code class="language-sql">SELECT SUM(order_price) FROM order_details GROUP BY order_no</code>
このクエリは、一意の各 order_price
の order_no
の合計を正常に返します。
集計関数とグループ化されたデータ: 隠された属性を明らかにする
集計関数は、各グループ内の属性にアクセスする方法を提供します。 前の例の SUM
関数は、各 order_no
グループの合計を計算します。 これは、グループに「ドリルダウン」し、要約された情報を取得する集計関数の機能を示しています。
標準 SQL コンプライアンス: GROUP BY
ルール
標準 SQL (MySQL のより寛大なアプローチとは異なります) では、SELECT
リスト内のすべての非集計カラムが GROUP BY
句に出現する必要があります。 したがって、次のクエリは有効です:
<code class="language-sql">SELECT order_no, SUM(order_price) FROM order_details GROUP BY order_no</code>
これは、非集計列である order_no
が GROUP BY
句に存在するため有効です。 同じ原則が、複数のグループ化された列と集計関数を含むクエリにも適用されます。
<code class="language-sql">SELECT order_no, order_price, MAX(order_item) FROM order_details GROUP BY order_no, order_price</code>
order_no
と order_price
の両方が GROUP BY
句に含まれているため、このクエリは有効です。
以上がSQL の GROUP BY 句は、集計関数を使用する場合と使用しない場合でどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。