如何在同一SQL查询中统计不同status的文档上传与剩余数量?
如何在同一SQL查询中同时统计两种状态的文档数量?
样本表
owner file_type status John doc_1 1 John doc_2 1 John doc_3 0 Mike doc_1 1 Mike doc_2 0 Mike doc_3 1 Dona doc_1 0 Dona doc_2 0 Dona doc_3 0 Jane doc_1 1 Jane doc_2 1 Jane doc_3 1
期望查询结果
owner uploaded remaining John 2 1 Mike 2 1 Dona 0 3 Jane 3 0
尝试的代码
SELECT owner AS 'Name', COUNT(file_type) AS 'uploaded' FROM sampleTable WHERE [status] = 1 GROUP BY owner
解决方案
你原来的查询用WHERE [status] = 1过滤掉了所有状态不为1的行,因此无法统计剩余文档数量。可以用条件聚合的方式,在分组后分别统计两种状态的数量:
通用SQL写法(适用于所有数据库)
SELECT owner, SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS uploaded, SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END) AS remaining FROM sampleTable GROUP BY owner
MySQL简化写法
如果使用MySQL,利用布尔值在聚合时会被转为0/1的特性,可简化为:
SELECT owner, SUM(status = 1) AS uploaded, SUM(status = 0) AS remaining FROM sampleTable GROUP BY owner
原理:通过CASE表达式(或MySQL的布尔判断)对每一行的status进行判断,符合条件则返回1,否则返回0,再用SUM函数累加得到对应状态的文档总数,以此在同一查询中同时统计已上传和剩余的文档数量。
内容的提问来源于stack exchange,提问作者ER_27
相关产品推荐
相关产品推荐

