1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQL 集約と並び替え編

Last updated at Posted at 2019-09-14

集約と並べ替え

集約関数

行数を数える COUNT関数

SELECT COUNT(引数)
FROM テーブル名

全行数えるなら(*)を利用。

SELECT COUNT(*)
FROM shohin;

NULLの行を除外したい場合、対象とする列を限定して引数に書く。

SELECT COUNT(shiire_tanka)
FROM Shohin;

合計を求める SUM関数

NULLがあった場合、無視されますので影響ありません。

SELECT SUM(hanbai_tanka), SUM(shiire_tanka)
FROM Shohin;

平均値を求める AVG関数

SUM関数と同様、NULLは含まれません。

300, 500, NULLの場合、(300 + 500) / 2 = 400となります。

SELECT AVG(hanbai_tanka)
FROM Shohin;

最大値・最小値を求める MAX関数・MIN関数

SELECT MAX(hanbai_tanka), MIN(shiire_tanka)
FROM Shohin;

グループ分けする GROUP BY句

SELECT 列名1, 列名2, 列名3
FROM テーブル名
GROU BY 列名1, 列名2, 列名3

グループ分けして、そのグループごとに計算して表示することができます。

下記、shohin_bunruiごとに行数を数えます。

SELECT shohin_bunrui, COUNT(*)
FROM Shohin
GROUP BY shohin_bunrui;

例えば、shohin_bunruiに衣服、事務用品、キッチン用品があった場合、それぞれ何行あるかを計算して表示できます。

shohin_bunrui     count
衣服       2
事務用品     4
キッチン用品    

WHERE句で条件を指定できます。

SELECT shiire_tanka, COUNT(*)
FROM Shohin
WHERE shohin_bunrui = '衣服'
GROUP BY shiire_tanka;

NULLがあった場合、NULLとして1つのグループに分類されます。

注意1:

GROUP BYでSELECT分に書けるのは、

・定数

・集約関数

・GROUP BY句で指定した列名(つまり集約キー)

注意2:

GROUP BY句に列の別名(AS)はつけれない

注意3:

GROUP BY句を使って結果を選択した時、表示される結果の順番はランダム

注意4:

GROUP BY句のGROUP BYリストに使用される式内では集計、またはサブクエリは使えない

集約した結果に条件を指定する HAVING句

GROUP BYを使って集約した際、更に条件を指定して絞り込みたい時はHAVING句を使います。

SELECT 列名1, 列名2, 列名3
FROM テーブル名
GROU BY 列名1, 列名2, 列名3
HAVING グループの値に対する条件

shohin_bunruiごとに集約をし、集約された値に対し更に2500(円)以上のもののみ取得するという条件をつけると

SELECT shohin_bunrui, AVG(hanbai_tanka)
FROM Shohin
GROUP BY shohin_bunrui
HAVING AVG(hanbai_tanka) >= 2500;

WHERE と HAVINGについて

「集約キーに対する条件」は WHERE句、HAVING句それぞれに書くことはできますが、その違いは何なのか。取得できる結果は同じですが、集約キーに対する条件はソートに掛かる時間の関係上WHERE句に書く方がいいそうです。

WHERE句

SELECT shohin_bunrui, COUNT(*)
FROM Shohin
WHERE shohin_bunrui = '衣服'
GROUP BY shohin_bunrui;
HAVING

--△ ソートに時間がかかり処理が遅くなる

```sql
SELECT shohin_bunrui, COUNT(*)
FROM Shohin
GROUP BY shohin_bunrui
HAVING shohin_bunrui = '衣服';

注意:

集計がHAVING句または選択リスト内にある場合、及び集計する列が外部参照の場合にだけWHERE句に集計を含めることができる。

検索結果を並べ替える ORDER BY句

ASC: 昇順(小さい順)

DESC: 降順(大きい順)

※指定しなければ自動的にASCになる

ORDER BY句は最後に書きます。

SELECT shohin_id, shohin_mei, hanbai_tanka, shiire_tanka
FROM shohin
ORDER BY hanbai_tanka;

--何も指定しなければASC(昇順:小さい順)

・NULLを含む列は先頭または末尾にまとめられて表示されます。

・GROUP BYと違い列の別名が使える

(処理の順番的にGROUP BYの時はまだ別名が認識されていないがORDER BY句は最後なので認識される)

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?