如何计算单排?

Ani*_*ney 2 mysql sql pivot

我只是想了解mysql的知识

 mysql> SELECT species, sex, COUNT(*) FROM pet
        -> WHERE species = 'dog' OR species = 'cat'
        -> GROUP BY species, sex;

+---------+------+----------+
| species | sex  | COUNT(*) |
+---------+------+----------+
| cat     | f    |        1 |
| cat     | m    |        1 |
| dog     | f    |        1 |
| dog     | m    |        2 |
+---------+------+----------+
Run Code Online (Sandbox Code Playgroud)

有可能得到吗?

+---------+-----------+-------------+
| species | malecount | femalecount |
+---------+-----------+-------------+
| cat     | 1         |       1     |
| dog     | 1         |       2     |
+---------+-----------+-------------+
Run Code Online (Sandbox Code Playgroud)

在单个查询中?

Joh*_*Woo 8

这是最短的答案MySQL.

SELECT  species,
        SUM(sex = 'm') maleCount,
        SUM(sex = 'f') femaleCount
FROM    pet
GROUP   BY species
Run Code Online (Sandbox Code Playgroud)

MySQL还支持内联IF语句:

SELECT  species,
        SUM(IF(sex = 'm',1,0)) maleCount,
        SUM(IF(sex = 'f',1,0)) femaleCount
FROM    pet
GROUP   BY species
Run Code Online (Sandbox Code Playgroud)

你也可以使用CASE几乎适用于RDBMS:

SELECT  species,
        SUM(CASE WHEN sex = 'm' THEN 1 ELSE 0 END) maleCount,
        SUM(CASE WHEN sex = 'f' THEN 1 ELSE 0 END) femaleCount
FROM    pet
GROUP   BY species
Run Code Online (Sandbox Code Playgroud)


Tar*_*ryn 6

可以使用聚合函数与CASE表达式枢转从行中的数据到列:

select species,
  sum(case when sex = 'm' then 1 else 0 end) maleCount,
  sum(case when sex = 'f' then 1 else 0 end) femaleCount
from pet
group by species
Run Code Online (Sandbox Code Playgroud)