编写SELECT SQL查询计算分组状态完成占比(忽略空值,无值时返回空)
SQL查询解决方案
以下是满足需求的SQL查询语句:
SELECT `Group`, Region, CASE WHEN COUNT(Status) = 0 THEN NULL ELSE CONCAT(ROUND( (SUM(CASE WHEN Status = 'Done' THEN 1 ELSE 0 END) / COUNT(Status)) * 100, 0 ), '%') END AS `Status Done %` FROM your_table GROUP BY `Group`, Region ORDER BY `Group`, Region;
核心逻辑说明:
COUNT(Status):自动忽略NULL值,统计分组内非空的Status记录总数。SUM(CASE...):统计分组内状态为Done的记录数量。CASE分支:当非空记录总数为0时返回NULL(对应结果空白);否则计算占比并格式化为带百分号的整数百分比(如需保留小数,可调整ROUND函数的第二个参数)。- 关键字处理:
Group是SQL保留关键字,需用反引号(`)包裹避免语法错误。 - 排序:
ORDER BY确保结果按Group和Region有序排列,与期望输出一致。
将语句中的your_table替换为实际数据表名即可执行,结果会完全匹配需求中的期望输出。
内容的提问来源于stack exchange,提问作者Aldo Putra Setia
相关产品推荐
相关产品推荐

