前提
MySQLにおいてcount関数を用いたデータの取得を行いたいのですが、行いたいことは実現できるものの、
もっとスマートなSQL文が書けるのではないかと思い質問させていただきます。
「testテーブル」
id | status | deleted_at |
---|---|---|
1 | 2 | 日付 |
2 | 1 | null |
3 | 3 | 日付 |
上記のテーブルにおいて、「statusには1か2か3」「deleted_atにはnullか日付」が入っているレコードが100件あると想定させていただきます。
実現したいこと
上記のテーブルにおいて、「status = 2の数」「deleted_at = nullの数」「status = 2とdeleted_at = nullの合計」「全レコード数から、status = 2 かつ deleted_at = nullの数を引いた数」の計4つのcountを1回で行いたいです。
下記のsql文を改善したいのですが、方法が思い付かないのでご助力いただきたいです。
該当のソースコード
select count(status = 2 or null) as 'status_count', count(deleted_at is null) as 'deleted_count', (count(status = 2 or null) + count(deleted_at is null)) as '合計', (count(id) - count(case when status = 2 and deleted_at is null then 1 end)) as '引いた数' from test;

回答1件
あなたの回答
tips
プレビュー