2

テーブルの性別フィールドで女性と男性の数を取得しようとしています。

1 つのクエリでそれぞれの数を取得する方法はありますか?

何かのようなもの:

select * from table count(where gender = 'm') as total_males, count(where gender = 'f') as total_females;

それとも2つのクエリが必要ですか?

select count(*) from table where gender = 'm';
select count(*) from table where gender = 'f';
4

4 に答える 4

3

これは基本的にPIVOT. MySQL にはピボットがないため、CASEステートメントで集計関数を使用してこれを実行できます。

select
  sum(case when gender = 'm' then 1 else 0 end) Total_Male,
  sum(case when gender = 'f' then 1 else 0 end) Total_Female
from yourtable

デモで SQL Fiddle を参照してください

または使用COUNT

select
  count(case when gender = 'm' then 1 else null end) Total_Male,
  count(case when gender = 'f' then 1 else null end) Total_Female
from yourtable;

デモで SQL Fiddle を参照してください

于 2012-12-11T19:22:29.637 に答える
2

このようなものが動作します:

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 を返す必要があります。COUNTCOUNT

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
于 2012-12-11T19:21:54.183 に答える
1
select sum(case when gender='m' then 1 else null end) as total_males,  sum(case when gender='f' then 1 else null end) as total_females from ... 

うまくいくはずです!

于 2012-12-11T19:22:02.053 に答える
0

2 つのクエリを避けることが唯一の問題である場合は、2 つのクエリを 1 つのクエリのサブセレクトとしていつでも記述できます。

(デュアルから 1 を選択) を 1 つ、(デュアルから 2 を選択) をデュアルから 2 つ選択

これは、シナリオでも機能します。

于 2012-12-11T19:23:32.713 に答える