MySQL 多连接/组查询

标签 mysql sql join

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/

相关文章:

php - 在一条 SQL 语句中从 MySQL 中检索数据

sql - 确定多态连接表是否合适的最佳方法是什么

php - MYSQL JOIN 和 COUNT

php - 使用 4 个表编写复杂的 SQL 查询

php - 在 PDO 查询中使用变量值作为 where 语句

mysql - 查询运行太慢

sql - 使用 sqlite 在列中查找最常见的单词?

sql - 根据postgresql中的组角色过滤查询行

MySQL - 获取左表元素,尽管 'where' 条件不兼容

mysql - 帮助使用 perl dbi 和 mysql 查询远程数据库