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)
仅作为该种族行的 adno 的计数。
最佳答案
试试这个:
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;
以上内容几乎适用于任何 SQL 产品,而不仅仅是 MySQL。不过,如果您愿意,也可以使用此版本,它采用 MySQL 将 bool 值隐式转换为整数 (true
-> 1
, false
-> 0
):
SELECT
ethnicity,
SUM(gender = 1) AS female,
SUM(gender = 2) AS Male
FROM students
GROUP BY ethnicity;
关于MySQL 多连接/组查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14441772/