このようなものが動作します:
SELECT SUM(IF(t.gender='m',1,0)) AS total_males
, SUM(IF(t.gender='f',1,0)) AS total_females
FROM mytable t
ここでの「トリック」は、条件付きテストを使用して各行に 0 または 1 を返し、次に 0 と 1 を合計していることです。これをもう少し明確にするために、 ではなく集計関数を使用していSUM
ますが、同じように簡単に使用できますが、ゼロの代わりに NULL を返す必要があります。COUNT
COUNT
SELECT COUNT(IF(t.gender='m',1,NULL)) AS total_males
, COUNT(IF(t.gender='f',1,NULL)) AS total_females
FROM mytable t
このクエリの SELECT リスト内の 2 つの式を考えてみましょう。
SELECT COUNT(1)
, SUM(1)
FROM mytable t
同じ値を返します。
MySQL 関数を避けたい場合はIF
、ANSI SQLCASE
式を使用してこれを行うこともできます。
SELECT SUM( CASE WHEN t.gender = 'm' THEN 1 ELSE 0 END )) AS total_males
, SUM( CASE WHEN t.gender = 'f' THEN 1 ELSE 0 END )) AS total_females
FROM mytable t