我想知道如何写这个查询.

我知道这个实际的语法是假的,但它会帮助你理解我想要什么.

SELECT distributor_id, 
COUNT(*) AS TOTAL, 
COUNT(*) WHERE level = 'exec', 
COUNT(*) WHERE level = 'personal'

我需要在一次查询中全部返回.

此外,它需要在一行中,因此以下内容不起作用:

'SELECT distributor_id, COUNT(*)
GROUP BY distributor_id'

推荐答案

可以将CASE语句与聚合函数一起使用.这与某些RDBMS中的PIVOT函数基本相同:

SELECT distributor_id,
    count(*) AS total,
    sum(case when level = 'exec' then 1 else 0 end) AS ExecCount,
    sum(case when level = 'personal' then 1 else 0 end) AS PersonalCount
FROM yourtable
GROUP BY distributor_id

Mysql相关问答推荐

如何在逗号分隔字符串值中使用LEFT函数

嵌套MySQL语句问题

AWS RDS上的MySQL复制错误:超级权限或REPLICATION_SLAVE_ADMIN权限的访问被拒绝

MySQL InnoDB:可以在没有回滚损失的情况下从运行的查询中进行大型插入吗

不分组寻呼

为什么 MAX 函数通过调用在 group 中生成正确的结果

Hibernate 不创建表'

为什么歌曲详细信息未显示在 Liked.handlebars 视图中?

没有 ORDER BY 的查询性能很高,有 ORDER BY 的查询速度慢得像爬行一样

如何分解分组依据的数据?

使用索引进行查询优化

当mysql中只有一个索引列时,为什么使用范围条件锁定读取会锁定每条记录?

连接两个表.使用连接列作为分组依据,然后根据时间戳 Select 最新行

MySQL - 单词边界的正则表达式,不包括下划线(连接标点符号)

MySQL 根据另一列中的值更改空值

了解 Spring 和数据库级别的事务?

是否可以在一个查询中将字符串附加到许多匹配的行

按长度过滤 varbinary 字段

在 MySQL 中重命名外键列

mysql 数据类型仅存储月份和年份