スタートページJavascriptMySQL
MySQLの概要文法の基本(1)文法の基本(2) ←文法の基本(3) →文法の基本(4)

文法の基本(3)SELECT文 集計・ソート


ここでの MySQL のプログラム作成・実行方法


GROUP BY (集計)

一般形:GROUP BY(大計列名, 中計列名, …)

ケース1 単純計算

売上表から「得意先別商品別個数集計表」を作成します。

SELECT 得意先コード, 商品コード, SUM(数量)
  FROM 売上表
  GROUP BY 得意先コード, 商品コード;
得意先  商品  SUM(数量)
コード  コード
  60	 100     7
  70     100     6
  50	 200     9
  50	 100     4
  60     200     2

ケース2 行内計算

ケース1に得意先名、商品名を加える。
売上表の「数量」と商品表の「単価」から金額を計算する。

SELECT 売上表.得意先コード, 得意先名, 売上表.商品コード, 商品名, SUM(数量) AS 数量合計,
       SUM(数量*単価) AS 金額合計, SUM(数量*単価)/SUM(数量) AS 平均単価
  FROM 売上表, 得意先表, 商品表
  WHERE 売上表.得意先コード = 得意先表.得意先コード
    AND 売上表.商品コード = 商品表.商品コード
  GROUP BY 売上表.得意先コード, 売上表.商品コード;
得意先  得意先名  商品    商品名  数量  金額 平均
コード            コード     合計 合計 単価
  60	得意先B   100    商品1    7    350   50
  70    得意先C   100    商品1    6    300   50
  50    得意先A   200    商品2    9    270   30
  50    得意先A   100    商品1    4    200   50
  60	得意先B   200    商品2    2     60   30

ケース3

「得意先別売上高集計表」にしてみます。商品名は不要ですが単価が必要なので、商品表との結合が必要です。

SELECT 売上表.得意先コード, 得意先名, SUM(数量*単価) AS 売上高
  FROM 売上表, 得意先表, 商品表
  WHERE 売上表.得意先コード = 得意先表.得意先コード
    AND 売上表.商品コード = 商品表.商品コード
  GROUP BY 売上表.得意先コード;
得意先  得意先名  売上高
コード
  60    得意先B   410
  70    得意先C   300
  50    得意先A   470

HAVING 合計結果によるデータ選択

ケース4

ケース3において、売上高 >= 400 のものだけを表示する。

SELECT 売上表.得意先コード, 得意先名, SUM(数量*単価) AS 売上高
  FROM 売上表, 得意先表, 商品表
  WHERE 売上表.得意先コード = 得意先表.得意先コード
    AND 売上表.商品コード = 商品表.商品コード
  GROUP BY 売上表.得意先コード
  HAVING 売上高 >= 400;
得意先  得意先名  売上高
コード
  60    得意先B   410
  50    得意先A   470

ORDER BY ソート

一般形: ORDER BY 大区分列名. 中区分列名. … 降順は DESC

ケース1

売上表を得意先コード、商品コードの昇順にソートする。

SELECT *
  FROM 売上表
  ORDER BY 得意先コード, 品名コード;
伝票番号 得意先 商品  数量
     コード コード
  1004      50     100      1
  1006      50     100      3
  1003      50     200      3
   :        :       :       :
  1009      70     100      2
  1011      70     100      2

ケース2

「得意先別売上高集計表」を売上高の大きいものから表示する。

SELECT 売上表.得意先コード, 得意先名, SUM(数量*単価) AS 売上高
  FROM 売上表, 得意先表, 商品表
  WHERE 売上表.得意先コード = 得意先表.得意先コード
    AND 売上表.商品コード = 商品表.商品コード
  GROUP BY 売上表.得意先コード
  ORDER BY 売上高 DESC;
得意先  得意先名  売上高
コード
  60    得意先B   410
  50    得意先A   470
  70    得意先C   300

ケース3

HAVING と合わせて使うこともできます。

SELECT 売上表.得意先コード, 得意先名, SUM(数量*単価) AS 売上高
  FROM 売上表, 得意先表, 商品表
  WHERE 売上表.得意先コード = 得意先表.得意先コード
    AND 売上表.商品コード = 商品表.商品コード
  GROUP BY 売上表.得意先コード
  HAVING 売上高 >= 400
  ORDER BY 売上高 DESC;
得意先  得意先名  売上高
コード
  60    得意先B   410
  50    得意先A   470