mysql - 如何在单行中计数?

标签 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 |
+---------+------+----------+

有可能得到吗?

+---------+-----------+-------------+
| species | malecount | femalecount |
+---------+-----------+-------------+
| cat     | 1         |       1     |
| dog     | 1         |       2     |
+---------+-----------+-------------+

在单个查询中?

最佳答案

这是 MySQL 中可能的最短答案。

SELECT  species,
        SUM(sex = 'm') maleCount,
        SUM(sex = 'f') femaleCount
FROM    pet
GROUP   BY species

MySQL 还支持内联 IF 语句:

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

您还可以使用几乎适用于 RDBMS 的 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

关于mysql - 如何在单行中计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15295618/

相关文章:

sql-server - SQL 中多个表和动态列的透视函数

pandas - 如何根据另一列值对数据进行透视

mysql - 使用 WHERE subseach 返回多个条目

sql - 日期类型的查询 substr 的索引是什么?

php - 在打印之前检查 file_get_contents 返回

sql - 有没有办法在 Vertica 中的现有表列上设置 AUTO_INCREMENT 属性?

c# - 如何执行嵌套? SQL 中的请求?

sql - 如何使用动态 SQL 生成列组?

Java mysql插入

mysql - 计算mysql中行之间的时间差