広告です。クリックいただけると励みになります。

人気記事(昨日)

    2025年05月27日

    データベースにおけるGROUP BY句の使い方をマスターしたいです。

    dima-solomin-uJ_x_xh1RLY-unsplash.jpg


    データベースにおけるGROUP BY句の使い方をマスターしたいです。


    解答

    `GROUP BY`句は、SQLにおいてデータをグループ化して集計するための非常に重要な機能です。
    これを使うことで、特定の列を基準にデータをグループ化し、そのグループに対して集計関数(`SUM`, `AVG`, `COUNT`, `MAX`, `MIN`など)を適用することができます。

    以下に、`GROUP BY`句の使い方を解説します。


    1. 基本構文

    `GROUP BY`句の基本的な構文は次のようになります。

    ```sql

    SELECT column1, aggregate_function(column2)
    FROM table_name
    GROUP BY column1;

    ```

    * `column1`: グループ化の基準となる列(通常、グループ化したい属性を指定)。
    * `aggregate_function(column2)`: 集計関数を使って、各グループに対して計算したい列。


    2. 基本的な例

    例えば、`sales`というテーブルに各店舗の売上データがあるとします。

    このテーブルには`store_id`(店舗ID)と`sales_amount`(売上金額)という列があると仮定します。
    このデータを店舗ごとにグループ化し、各店舗の売上合計を求めるクエリは以下のようになります。

    ```sql

    SELECT store_id, SUM(sales_amount) AS total_sales
    FROM sales
    GROUP BY store_id;

    ```

    * このクエリでは、`store_id`ごとに売上金額(`sales_amount`)を合計して、各店舗の売上合計(`total_sales`)を表示します。


    3. `GROUP BY`の使い方

    3.1 複数列によるグループ化

    複数の列を使ってデータをグループ化することもできます。

    例えば、`store_id`と`sales_date`(売上日)を基準にグループ化して、各店舗ごとの日別売上合計を計算したい場合、次のように書きます。


    ```sql

    SELECT store_id, sales_date, SUM(sales_amount) AS daily_sales
    FROM sales
    GROUP BY store_id, sales_date;

    ``` *

    ここでは、店舗ごとに日別に売上を合計しています。
    `GROUP BY`句で複数の列(`store_id`と`sales_date`)を指定して、データを日別、店舗別にグループ化しています。


    3.2 集計関数を使う

    `GROUP BY`句と組み合わせて、集計関数(`SUM`、`AVG`、`COUNT`、`MAX`、`MIN`など)を使用することで、グループごとの集計結果を計算できます。

    いくつかの集計関数を使った例を見てみましょう。


    * `SUM`: グループ内の値を合計します。

    ```sql

    SELECT store_id, SUM(sales_amount) AS total_sales
    FROM sales
    GROUP BY store_id;

    ``` *


    `AVG`: グループ内の値の平均を求めます。

    ```sql

    SELECT store_id, AVG(sales_amount) AS avg_sales
    FROM sales
    GROUP BY store_id;

    ```


    * `COUNT`: グループ内の行数(レコード数)をカウントします。

    ```sql

    SELECT store_id, COUNT(*) AS sales_count
    FROM sales
    GROUP BY store_id;

    ``` *


    `MAX`: グループ内の最大値を求めます。

    ```sql

    SELECT store_id, MAX(sales_amount) AS max_sales
    FROM sales
    GROUP BY store_id;

    ```


    * `MIN`: グループ内の最小値を求めます。

    ```sql

    SELECT store_id, MIN(sales_amount) AS min_sales
    FROM sales
    GROUP BY store_id;

    ```


    3.3 `HAVING`句との併用

    `GROUP BY`句と`HAVING`句を併用することで、グループ化したデータに対して条件を設定できます。
    `HAVING`句は、`GROUP BY`句の結果にフィルタリング条件を適用するために使います。
    `WHERE`句とは異なり、`HAVING`は集計後の結果に条件を適用するため、集計関数を使う際に有効です。
    例えば、各店舗の売上合計が1000

    以上の店舗のみを取得する場合、次のように書きます。

    ```sql

    SELECT store_id, SUM(sales_amount) AS total_sales
    FROM sales
    GROUP BY store_id
    HAVING SUM(sales_amount) >= 1000;

    ```

    * このクエリでは、`SUM(sales_amount)`が1000以上の店舗のみを表示します。


    4. `GROUP BY`の注意点

    * `GROUP BY`を使用する場合、`SELECT`句に指定する列(または集計関数で使用する列)は、`GROUP BY`で指定した列、または集計関数の対象でなければなりません。
    * `GROUP BY`句を使った結果には、グループごとに1行が返されます。
    集計関数を使うことで、各グループの要約を得ることができます。


    5. 実務での活用例

    実際のデータ分析やレポート作成において、`GROUP BY`句は非常に多く使用されます。

    以下は実務でよく使う例です。

    5.1 売上データの分析

    各店舗ごとの売上金額を合計し、その中で売上が最も高い店舗を取得したい場合:

    ```sql

    SELECT store_id, SUM(sales_amount) AS total_sales
    FROM sales
    GROUP BY store_id
    ORDER BY total_sales DESC
    LIMIT 1;

    ```

    5.2 月別売上分析

    月別に売上合計を求める場合:

    ```sql

    SELECT YEAR(sales_date) AS year, MONTH(sales_date) AS month, SUM(sales_amount) AS monthly_sales
    FROM sales
    GROUP BY YEAR(sales_date), MONTH(sales_date)
    ORDER BY year, month;

    ```

    このクエリは、`sales_date`列を使って、年と月ごとに売上を集計しています。


    まとめ

    * `GROUP BY` は、データをグループ化し、そのグループごとに集計関数を適用するために使います。
    * 集計関数(`SUM`、`AVG`、`COUNT`、`MAX`、`MIN`)と一緒に使用して、集計結果を得ることができます。
    * `HAVING` 句を使って、集計結果に条件を追加することができます。
    * 複数列でグループ化したり、条件を適用したりすることで、実務で非常に便利に活用できます。

    `GROUP BY`句を使いこなすことで、データをグループ化して要約を行う分析が容易になります。







    オラクルマスター教科書 Gold DBA Oracle Database Administration2 (EXAMPRESS) [ 株式会社コーソル 企画&マーケティング部 ]

    価格:8250円
    (2025/5/18 14:32時点)
    感想(0件)


    SQLの絵本 第2版 データベースが好きになる新しい9つの扉【電子書籍】[ 株式会社アンク ]

    価格:1958円
    (2025/4/23 14:18時点)
    感想(0件)


     



    ブログランキング・にほんブログ村へ
    【下記、広告です。クリックいただけると励みになります。】
    posted by モニー at 15:00| Comment(0) | データベース | このブログの読者になる | 更新情報をチェックする
    この記事へのコメント
    コメントを書く
    コチラをクリックしてください