2016年12月15日木曜日

【SQL】SQLのお勉強(2)

続きです。

5、集計とグループ化
(1) 集計関数(SUM/MAX/MIN/AVG/COUNT)
SELECT
   SUM(出金額) AS 合計出金額,
   AVG(出金額) AS 平均出金額,
   MAX(出金額) AS 最大出金額,
   MIN(出金額) AS 最小出金額
FROM 家計簿



(2) COUNT
・COUNT(*)は、NULLを含めた行数をカウントする。COUNT(列)は、指定列の値がNULLである行を無視して数える
・重複した値を除いた集計
 SELECT COUNT(DISTINCT 費目) FROM 家計簿
・SELECT文の選択列リスト部分、HAVING句で使用

(3) グループ化
【構文】
SELECT グループ化の基準列名・・・, 集計関数
  FROM テーブル名
(WHERE 絞り込み条件)
GROUP BY グループ化の基準列名・・・
【例】費目でグループ化
SELECT 費目, SUM(出金額) AS 費目の出金額の合計
  FROM 家計簿
GROUP BY 費目

(4) HAVING(絞り込み)
【構文】
SELECT グループ化の基準列名・・・, 集計関数
  FROM テーブル名
(WHERE 絞り込み条件)
GROUP BY グループ化の基準列名・・・
HAVING 集計結果に対する絞り込み条件
【例】
SELECT 費目, SUM(出金額) AS 費目の出金額の合計
  FROM 家計簿
GROUP BY 費目
HAVING SUM(出金額) > 0


【SELECT文まとめ】
SELECT 選択列リスト
   FROM テーブル名
(WHERE 条件式)
(GROUP BY グループ化列名)
(HAVING 集計結果に対する条件式)
(ORDER BY 並び替え列名)
※ORDER BY は必ず最後に記述

6、副問い合わせ
ほかのSQL文の一部分として登場するSELECT文。丸カッコでくくって記述する。
(1) 2回のSELECTが必要な場合:ネスト構造
例)最大の出費に関する費目と金額を求める
SELECT 費目,出金額 FROM 家計簿
WHERE 出金額 = ( SELECT MAX(出金額) FROM 家計簿)
 → ( SELECT MAX(出金額) FROM 家計簿)を「サブクエリ」という
(2) 副問い合わせの結果から、確実にNULLを除外する方法
例1)
SELECT * FROM 家計簿アーカイブ
WHERE 費目 IN ( SELECT  費目 FROM 家計簿
   WHERE 費目 IS NOT NULL)

例2)
SELECT * FROM 家計簿アーカイブ
WHERE 費目 IN ( SELECT  COALESCE(費目,'不明') FROM 家計簿)

  →費目がNULLなら、代わりに'不明'にする
(3) INSERTの特殊構文(VALUES以降の記述に相当する内容をSELECTで定義)
INSERT INTO 家計簿集計(費目,合計,平均,回数)
SELECT 費目, SUM(出金額), AVG(出金額),0
FROM 家計簿
WHERE 出金額 > 0
GROUP BY 費目


【参考URL】
http://www.sql-reference.com/index.html#subquery

0 件のコメント:

コメントを投稿