条件付きのCOUNTクエリ


2016年7月20日

プログラム構成において頑張りどころはいろいろあれど、僕はSQLで頑張るのが好きです。

条件付きでCOUNTクエリ発行出来たらいいのになって考えたこと無いですか?
もちろんサブクエリ使えば何とでもなりますが、サブクエリ無しだとどうでしょう?

例えばこんなテーブルscoreがあったとして

id point
1 50
2 30
3 70
4 10
5 20

30point未満の件数と50point以上の件数を欲しい場合、普通に考えるとこんなクエリなにります。


これを一度で取得したいと思いませんか? 思いますよね?
こんなカンジデイケます。

例1

クエリ

解説

ポイントはCOUNT関数の仕様です。

COUNT関数はアスタリスク(*)を使用するとグループ内の全レコード数を返し、
以外を指定した場合、NULL値 をカウント数に含めない。
さらに DISTINCT を指定すると重複した値の行をカウントに含めない。

つまりCOUNTで式が利用できることに気付くのがミソです。

ちなみに、多値論理である3値論理の論理演算が苦でなければ、こちらのほうがスマートです。

例2

クエリ

解説

3値論理の論理演算で下記になることを理解出来ていると難とないことですね。

  • (TRUE AND NULL) → NULL
  • (FALSE AND NULL) → FALSE
  • (TRUE OR NULL) → TRUE
  • (FALSE OR NULL) → NULL

みなさんも頑張れることはとにかくSQLで頑張ってみませんか!