複数のレコード数を1つのSQLでカウントする場合、結論から
SELECT COUNT(field1='xxx' or null) AS count1, COUNT(field2='yyy' or null) AS count2 FROM users ;
みたいな感じ。
具体的にはCOUNT()はnull以外レコード数を取ってくるのが仕様らしいです。
ポイントは何も入っていなかったり, FALSEの場合もカウントには入るという点です。
ひたすらnullだけ除外します。
or nullというのが少し気持ち悪いですが以下のSQLを流してみると分かります。
SELECT true and null, true or null, false and null, false or null; => null, true, false, null
見やすくすると
true and null => null true or null => true false and null => false false or null => null
つまり条件としては2行目と4行目の条件に当てはまる可能性があり、COUNT()ではnullが除外され条件に合致するのものをカウントできる、ということです。
逆に条件に合わないものの数を数える場合はorをandにしてやれば良い、ということですね。
割と直感的ではないので構文として覚えておくと良さそうですね。