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

SQL の GROUP BY 句は、集計関数を使用する場合と使用しない場合でどのように機能しますか?

Barbara Streisand
リリース: 2025-01-13 07:10:45
オリジナル
616 人が閲覧しました

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

SQL の GROUP BY 句: 詳細

SQL の GROUP BY 句は、指定された列に基づいて行をグループ化し、グループ化されたデータの集計計算 (SUMCOUNTAVG など) を可能にする強力なツールです。 集約関数を使用した場合と使用しない場合の動作を調べてみましょう。

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_priceorder_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_noGROUP BY 句に存在するため有効です。 同じ原則が、複数のグループ化された列と集計関数を含むクエリにも適用されます。

<code class="language-sql">SELECT order_no, order_price, MAX(order_item)
FROM order_details
GROUP BY order_no, order_price</code>
ログイン後にコピー

order_noorder_price の両方が GROUP BY 句に含まれているため、このクエリは有効です。

以上がSQL の GROUP BY 句は、集計関数を使用する場合と使用しない場合でどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート