ywork2020.com

Title

列の値を集約して他の列の値を集計する

目次 (INDEX)

GROUP BY とは

ここで説明する GROUP BY とは次の語句からなる SQL の修飾子です。
group
読み: グループ
意味: 群、集まり、集団、団体
by
読み: バイ
意味: ~によって

目次に戻る

GROUP BY 修飾子の概要

この修飾子は、指定列の値で重複しているレコードを集約し、他の列の値を集計します。

目次に戻る

サンプルデータベースとテーブルの構造

データ抽出用のサンプルテーブルが必要でしたので事前に作成しています。

現在、データベースにはサンプルとして以下に示す構造の sales テーブルを作成しており、 そのテーブルに 2020年 2月の売上のサンプルデータを登録した状態になっています。

サンプルコード: テーブルの作成

サンプルテーブルを以下のクエリで作成しました。

CREATE TABLE sales(
	伝票番号 int(11),
	商品コード varchar(10),
	売上金額 decimal(10.2),
	売上日 date
);
カラム1
(伝票番号)
カラム2
(商品コード)
カラム3
(売上金額)
カラム4
(売上日)
データデータデータデータ
データデータデータデータ

目次に戻る

サンプルコードと実行結果

ここからは実際に稼働しているデータベースに接続してクエリを実行していきます。 下記に配置された各ボタンをクリックすると、ボタンに書かれているサンプルクエリを実行して結果を表示します。

サンプルコード: SQL (SELECT 文の基本的な使い方)

SELECT * FROM テーブル名;

これはテーブルデータを抽出するための基本構文です。
指定したテーブルのデータを全件、全フィールドで抽出します。 この単純なクエリはデータ量が少ない場合や開発段階では利用することが多いと思いますが、実際の運用では使いません。

実行:

サンプルコード: SQL (GROUP BY を利用した値の集計)

SELECT 集約列, SUM(集計列) FROM テーブル名 GROUP BY 集約列;
実行:

説明:
GROUP BY と SUM 関数を併用した例です。
GROUP BY で指定したカラムの重複したデーター行を集約し、 SUM 関数で重複行の値の合計を求めています。
サンプルの場合だと、1ヵ月で各商品の売上金額の合計を求めることができます。

サンプルコード: SQL (GROUP BY を利用した集約列のカウント)

SELECT 集約列, COUNT(集約列) FROM テーブル名 GROUP BY 集約列;
実行:

説明:
GROUP BY と COUNT 関数を併用した例です。
GROUP BY で指定したカラムの重複したデーター行を集約し、 COUNT 関数で重複行毎のカウントを求めています。
サンプルの場合だと、1ヵ月で各商品が、いくつずつ売れたのかを調べることができます。

目次に戻る

SQL の仕様上の注意点

※ SQL の予約句はアルファベットの大文字と小文字を区別しませんが、 任意で作成したデータベースやテーブル、カラムの名前などは区別されるので注意が必要です。

目次に戻る