SQL使用COUNT统计不同尺寸床位数量时全返回总条数问题咨询
问题排查与修正方案
问题原因
- 分组维度不符合需求:你的统计目标是获取各尺寸对应的床位总数,核心分组维度应为
size字段,但现有SQL在GROUP BY子句中同时加入了bed和size两个字段。 - 触发全表统计异常:如果
bed字段存在全局重复值/大面积空值,会导致所有数据被划分到同一分组,最终COUNT(bed)返回全表总床位数量100,不符合按尺寸拆分统计的预期。
修正方案
场景1:仅需按尺寸统计总床位数(输出3行分别对应3种尺寸)
仅保留size作为分组维度即可,修正SQL如下:
SELECT size, COUNT(bed) AS total FROM `table` GROUP BY size ORDER BY size DESC
场景2:需要保留每行床位的bed字段,同时展示对应尺寸的总床位数(输出100行,每行总数字段对应所属尺寸的床位总数)
使用窗口函数按size分区统计,修正SQL如下:
SELECT bed, size, COUNT(bed) OVER(PARTITION BY size) AS total FROM `table` ORDER BY bed, size DESC
内容的提问来源于stack exchange,提问作者user17417224
相关产品推荐
相关产品推荐

