我只是想了解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)
在单个查询中?
这是最短的答案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)
可以使用聚合函数与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)