前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL语句case when外用sum与count的区别

SQL语句case when外用sum与count的区别

作者头像
solate
发布2019-07-22 16:32:39
1.6K0
发布2019-07-22 16:32:39
举报
文章被收录于专栏:solate 杂货铺

如下这个表TEST:

代码语言:javascript
复制
  category | commdity | price
 ------------+------------+-------
  衣服        | T恤        |  1000
  办公用品 | 打孔器   |   500
  厨房用具 | 菜刀       |  3000
  厨房用具 | 高压锅    |  6800
  厨房用具 | 叉子       |   500
  厨房用具 | 擦菜板    |   880
  办公用品 | 圆珠笔    |   100
  衣服        | 运动T恤  |  4000

如果我想把商品按照1000元以下,1000-3000, 3000 以上分为三个档次显示出来,正确的语句是:

代码语言:javascript
复制
 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;

得出结果

代码语言:javascript
复制
  low | mid | high
 -----+-----+------
    5 |   1 |    2

当把上述语句的sum换成count时,得出结果:

代码语言:javascript
复制
  low | mid | high
 -----+-----+------
    8  |   8   |    8

如果只是用列来显示,SELECT COUNT(price) FROM TEST WHERE price <= 1000 可以得出正确的结果:

代码语言:javascript
复制
 low 
 ----- 
  5  

所以用sum的结果是对的。 原因是什么呢?

三个case语句效果相同,其实就是类似于增加一个字段,这个字段,满足条件的为1,不满足的是0,这样sum的效果,就是将所有的1加起来,也就是所有满足条件的记录个数。

而count,会不管是1还是0,都会统计,这样怎么算都是总条目数8个。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档