MySQLのCASE WHENで集計する

2017/11/11

例えば下記のようなデータがあったとする。

mysql> SELECT * FROM users;
+------+--------------------+------+-------+
| id   | name               | age  | score |
+------+--------------------+------+-------+
|    1 | 宇佐美いちか       |   13 |    21 |
|    2 | 有栖川ひまり       |   13 |   100 |
|    3 | 立神あおい         |   13 |    96 |
|    4 | 琴爪ゆかり         |   17 |    80 |
|    5 | 剣城あきら         |   17 |    75 |
|    6 | キラ星シエル       |   13 |    53 |
+------+--------------------+------+-------+
6 rows in set (0.00 sec)

score が

  • 100〜80・・・S評価
  • 79〜50・・・A評価
  • 49〜30・・・B評価
  • 0〜30・・・C評価

だとして、それぞれのランクに何人いるのか?みたいなSELECTを書く。

mysql> SELECT
  COUNT( CASE WHEN score >= 80 THEN 1 END) as 'S評価',
  COUNT( CASE WHEN score >= 50 AND score < 80 THEN 1 END) as 'A評価',
  COUNT( CASE WHEN score >= 30 AND score < 50 THEN 1 END) as 'B評価',
  COUNT( CASE WHEN score < 30  THEN 1 END) as 'C評価'
FROM users;
+---------+---------+---------+---------+
| S評価   | A評価   | B評価   | C評価   |
+---------+---------+---------+---------+
|       3 |       2 |       0 |       1 |
+---------+---------+---------+---------+
1 row in set (0.00 sec)