如下这个表TEST:
category | commdity | price
------------+------------+-------
衣服 | T恤 | 1000
办公用品 | 打孔器 | 500
厨房用具 | 菜刀 | 3000
厨房用具 | 高压锅 | 6800
厨房用具 | 叉子 | 500
厨房用具 | 擦菜板 | 880
办公用品 | 圆珠笔 | 100
衣服 | 运动T恤 | 4000
如果我想把商品按照1000元以下,1000-3000, 3000 以上分为三个档次显示出来,正确的语句是:
SELECT SUM (CASE WHEN price <= 1000 THEN 1 ELSE 0 END)AS low,
SUM (CASE WHEN price BETWEEN 1001 AND 3000 THEN 1 ELSE 0 END)AS mid,
SUM (CASE WHEN price > 3000 THEN 1 ELSE 0 END)AS high FROM TEST;
得出结果
low | mid | high
-----+-----+------
5 | 1 | 2
当把上述语句的sum换成count时,得出结果:
low | mid | high -----+-----+------ 8 | 8 | 8如果只是用列来显示,SELECT COUNT(price) FROM TEST WHERE price <= 1000 可以得出正确的结果: low ----- 5所以用sum的结果是对的。原因是什么呢?三个case语句效果相同,其实就是类似于增加一个字段,这个字段,满足条件的为1,不满足的是0,这样sum的效果,就是将所有的1加起来,也就是所有满足条件的记录个数。
而count,会不管是1还是0,都会统计,这样怎么算都是总条目数8个。
本文介绍了一种使用SQL对商品价格进行分档统计的方法。通过CASE WHEN语句结合SUM函数,实现了不同价格区间商品数量的有效统计。同时对比了SUM与COUNT函数在此场景下的差异。

被折叠的 条评论
为什么被折叠?



