テクノロイド

コンピュータやゲーム他、色々日々思ったことをつづっていきます。

午前と午後に受付けた人数を出すSQL

2013-04-19 15:03:23 | アプリ・ソフト
SQLをこのソフトカテゴリーにするのも抵抗があるけど、適当なカテゴリーがないので仕方ない。
(とりあえずpostgresqlだし)

午前と午後に受付けた人数をそれぞれ表にしたいと言われた。
以下、とある1日の例
orca=> select count(*) from tbl_uketuke where ukeymd='20130414' and uketime>'120000';
count
-------
3

基本はこうだけど、午前と午後を一緒に出したい時は?で、まず見つけたのがこれ。(※ '='が抜けてる)
orca=> select sum(case when uketime>'120000' then 1 else 0 end),sum(case when uketime<'120000' then 1 else 0 end) from tbl_uketuke where ukeymd='20130414';
sum | sum
-----+-----
3 | 4

へー、こんなこと出来ちゃうんだと思ったけど、countじゃないのがちと気になる。
これが出来るなら、こんなことできないかなとやってみた。
orca=> select count(uketime>'120000'),count(uketime<'120000') from tbl_uketuke where ukeymd='20130414';
count | count
-------+-------
7 | 7

がーん、ダメじゃんと思ったが、以下のようにすればいいらしい。
orca=> select count(uketime>'120000' or null),count(uketime<'120000' or null) from tbl_uketuke where ukeymd='20130414';
count | count
-------+-------
3 | 4

なんかエレガントさにかける気がするが、まっいっか。

というわけで、3月の一覧を出すには
orca=> select count(uketime>'120000' or null),count(uketime<'120000' or null) from tbl_uketuke where ukeymd>'20130300' group by ukeymd order by ukeymd;