0

id私はこのようなテーブルを持っています

|----|-----------|--------|
| ID | Ethnicity | Gender |
| 1  |    2      |   1    |
| 2  |    3      |   1    |
| 3  |    4      |   2    |
|----|-----------|--------|
etc ....

そして、男性(1)と女性(2)の民族グループを示す一連の結果を取り戻そうとしています。

したがって、この例の結果行は次のようになります。

Ethnicity    Male    Female
    2         1        0
    3         1        0
    4         0        1

これまでのところ、私は私が欲しいものに近づいています:

SELECT ethnicity, 
(SELECT 
        count(id)
    FROM
        table_name
    WHERE
        gender = '2' ) as female,
(SELECT 
        count(id)
    FROM
        table_name
    WHERE
        gender = '1') as male
FROM table_name
GROUP BY ethnicity

それは私に与えます:

Ethnicity    Male    Female
2            2        1
3            2        1
4            2        1

しかし、count(id)それが理にかなっている場合は、その民族の列のアドノのカウントだけである必要があります。

4

2 に答える 2

2

代わりにこれを試してください:

SELECT 
  ethnicity, 
  SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END) AS female,
  SUM(CASE WHEN gender = 2 THEN 1 ELSE 0 END) AS Male
FROM students
GROUP BY ethnicity;

上記は、MySQLだけでなく、事実上すべてのSQL製品で機能するはずです。ただし、必要に応じて、このバージョンを使用することもできます。このバージョンでは、MySQLによるブール値からintへの暗黙的な変換が使用されます(true ->  1false ->  0)。

SELECT 
  ethnicity, 
  SUM(gender = 1) AS female,
  SUM(gender = 2) AS Male
FROM students
GROUP BY ethnicity;
于 2013-01-21T15:25:35.487 に答える
0
SELECT 
  ethnicity, 
  CASE WHEN gender = 1 THEN 1 ELSE 0 END AS Male,
  CASE WHEN gender = 2 THEN 1 ELSE 0 END AS Female
FROM students
于 2013-01-21T15:29:48.263 に答える