0
0

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 1 year has passed since last update.

SQLのGROUP BY句、HAVING句、ORDER BY句の使い方まとめ

Posted at

・はじめに

今回使う表はこちらです。

商品テーブル

商品ID 商品名 商品分類 販売単価 仕入単価 登録日
1 Tシャツ 衣服 1000 500 2009-09-20
2 穴あけパンチ 事務用品 500 320 2009-09-11
3 カッターシャツ 衣服 4000 2800
4 包丁 キッチン用品 3000 2800 2009-09-20
5 圧力鍋 キッチン用品 6800 5000 2009-01-15
6 フォーク キッチン用品 500   2009-09-20
7 おろしがね キッチン用品 880 790 2008-04-28
8 ボールペン 事務用品 100   2009-11-11

・GROUP BY句とは

 GROUP BY句はSELECT文と集約関数と組み合わせて使い、検索結果をグループ分けするものです。

先にGROUP BYを使わない検索結果を見ていきます。
SELECT COUNT(商品分類) FROM 商品
結果=>

COUNT(商品分類)
8

となります。

次にGROUP BYを使ってみます。
SELECT 商品分類, COUNT(*) FROM 商品 GROUP BY 商品分類とすると
結果=>

商品分類 COUNT
衣服 2
事務用品 2
キッチン用品 4

という結果が出ます。

このようにGROUP BY句は検索結果を分類してくれます。

・検索結果にNULLがある場合

 通常、COUNTの引数にカラムを指定するとNULLは排除されます。

SELECT COUNT(仕入単価) FROM 商品;
結果=>

COUNT(仕入単価)
6

 GROUP BY句を使うと分類に加えてNULLが指定されているのが何件あるか見ることができます。

SELECT 仕入単価, COUNT(*) FROM 商品 GROUP BY 仕入単価;
結果=>

仕入単価 COUNT
  2
320 1
500 1
5000 1
2800 2
790 1

・Having句とは

 Having句とはGROUP BY句でグループ分けしたものを条件指定するものです。

まずHaving句を使わないものを見ます。
SELECT 商品分類, COUNT(*) FROM 商品 GROUP BY 商品分類
結果=>

商品分類 COUNT
衣服 2
事務用品 2
キッチン用品 4

この表をさらに条件指定する際にHAVING句を使います。例えばCOUNTが2を選択する場合

SELECT 商品分類, COUNT(*) FROM 商品 GROUP BY 商品分類 HAVING COUNT(*) = 2;
結果=>

商品分類 COUNT
衣服 2
事務用品 2

このようにCOUNTが2のものを選択できます。

・HAVING句とWHERE句の使い分け

 HAVING句は2つ以上の行に渡って条件指定をする際に、WHERE句は1つの行に対して条件指定をする際に使います。

・ORDER BY句とは

 ORDER BY句とはカラムの並び順を昇順または降順に変えるものです。

 
 先にORDER BY句なしの文を打ってみます。例えば
  SELECT 商品ID, 商品名, 販売単価 FROM 商品;

商品ID 商品名 販売単価
1 Tシャツ 1000
2 穴あけパンチ 500
3 カッターシャツ 4000
4 包丁 3000
5 圧力鍋 6800
6 フォーク 500
7 おろしがね 880
8 ボールペン 100

 この文では並び順はランダムになります。(作った順?)

 そこでORDER BY句を使って販売単価の並び方を変えてみます。
SELECT 商品ID, 商品名, 販売単価 FROM 商品 ORDER BY 販売単価

すると、販売単価の低い順(昇順)に並びます。

商品ID 商品名 販売単価
8 ボールペン 100
2 穴あけパンチ 500
6 フォーク 500
7 おろしがね 880
1 Tシャツ 1000
4 包丁 3000
3 カッターシャツ 4000
5 圧力鍋 6800

 もし表にNULLがある場合はNULLは先頭もしくは一番後ろにまとめられる。

NULLがある表

商品ID 商品名 仕入単価
1 Tシャツ 500
2 穴あけパンチ 320
3 カッターシャツ 2800
4 包丁 2800
5 圧力鍋 5000
6 フォーク  
7 おろしがね 790
8 ボールペン  

仕入単価の並びを降順に並べると
SELECT 商品ID, 商品名, 仕入単価 FROM 商品 ORDER BY 仕入単価 DESC;

商品ID 商品名 仕入単価
5 圧力鍋 5000
3 カッターシャツ 2800
4 包丁 2800
7 おろしがね 790
1 Tシャツ 500
2 穴あけパンチ 320
6 フォーク  
8 ボールペン  

・昇順と降順

 `ORDER BY カラム DESC`とうつと降順(値の大きい順)になります。ASCを打つと昇順になりますが、省略すると自動的に昇順になるので実際に打つことは少ないかもしれません。

・ORDER BY句テクニック

 ORDER BY句は別名を付けることのできるASを使うことができます。
 WHERE句ではASを使った別名を条件指定に使うことができませんが、ORDER BY句では使用することができます。

 また、ORDER BY句には集約関数を使うことができます。

SELECT 商品分類, COUNT(*) FROM 商品 GROUP BY 商品分類とすると
結果=>

商品分類 COUNT(*)
衣服 2
事務用品 2
キッチン用品 4

こうなります。

ここでORDER BYを使って並べ替えます。
SELECT 商品分類, COUNT(*) FROM 商品 GROUP BY 商品分類 ORDER BY COUNT(*) DESC;
結果=>

商品分類 COUNT(*)
キッチン用品 4
衣服 2
事務用品 2

このようにORDER BY句は集約関数を使って降順に並べ替えることができます。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?