MW211 EXIT

devlog
MySQL/件数集計の複数条件(1)
2014年06月28日
┌──────────────────────────────────────┐
│SELECT COUNT(*) FROM 表 WHERE 列 > 0;                                       │
│SELECT COUNT(*) FROM 表 WHERE 列 = 0;                                       │
│SELECT COUNT(*) FROM 表 WHERE 列 < 0;                                       │
└──────────────────────────────────────┘
上記を同時に行う方法。

┌──────────────────────────────────────┐
│SELECT COUNT(*)              AS `全ての件数(NULLを含む)`,                   │
│       COUNT(列)             AS `全ての件数(NULLを除く)`,                   │
│       COUNT(列 > 0 OR NULL) AS `正数の件数`,                               │
│       COUNT(列 = 0 OR NULL) AS `ゼロの件数`,                               │
│       COUNT(列 < 0 OR NULL) AS `負数の件数`                                │
│    FROM 表;                                                                │
└──────────────────────────────────────┘

COUNT関数はNULL以外の件数を数えるのだが、
これと以下の論理和条件(●)を駆使して、FALSEをNULLに置換させることにより
条件に一致するものだけをNULL以外としてカウントするという仕組みだ。
  ・(TRUE  AND TRUE ) → TRUE     ・(TRUE  OR  TRUE ) → TRUE
  ・(TRUE  AND FALSE) → FALSE    ・(TRUE  OR  FALSE) → TRUE
  ・(TRUE  AND NULL ) → NULL     ●(TRUE  OR  NULL ) → TRUE
  ・(FALSE AND FALSE) → FALSE    ・(FALSE OR  FALSE) → FALSE
  ・(FALSE AND NULL ) → FALSE    ●(FALSE OR  NULL ) → NULL
  ・(NULL  AND NULL ) → NULL     ・(NULL  OR  NULL ) → NULL
分類:MySQL