groupby函数_SQL分组函数和聚合函数的几点说明

1 分组聚合的原因

SQL中分组函数和聚合函数之前的文章已经介绍过,单说这两个函数有可能比较好理解,分组函数就是group by,聚合函数就是COUNT、MAX、MIN、AVG、SUM。

e86bf40fd703260ea351c643bf2540a9.png

拿上图中的数据进行解释,假设按照product_type这个字段进行分组,分组之后结果如下图。

SELECT product_type from product
group by product_type

805a9bc9dd40ff2cbd91d8fd7b19d6ef.png

从图中可以看出被分为了三组,分别为厨房用具、衣服和办公用品,就相当于对product_type这个字段进行了去重,确实group by函数有去重的作用。

SELECT DISTINCT product_type from product

假设分组之后,我想看一下价格,也就是sale_price这个字段的值,按照如下这个写法,会报如下错误。

SELECT product_type,sale_price from product
group by product_type

333c5d5e7eec0dfc9b4a6714836378cf.png

这是为什么呢?原表按照product_type分组之后,厨房用具对应4个值,衣服对应2个值,办公用品对应2个值,这就是在取sale_price这个字段的时候为什么报错了,一个空格中不能填入多个值,这时候就可以用聚合函数了,比如求和,求平均,求最大最小值,求行数。聚合之后的值就只有一个值了。

738ce7ae1cf522679b83056e7eb58de9.png

SELECT product_type,sum(sale_price),avg(sale_price),count(sale_price),max(sale_price) from product
group by product_type

49f57d8e6b8b564d5d694c552cf0bd3b.png

对于多个字段的分组,其原理是一样的。从上述中记住两点:分组去重和分组聚合。

2 distinct和group by去重的区别

  • Distinct 和group by 设计时侧重点不一样

distinct只是为了去重,而group by是为了聚合统计的。

  • 两者都有去重的效果,但是执行的效率不一样

单个字段去重

--DISTINCT
SELECT distinct product_type from product
--GROUP BY
select product_type from product
GROUP BY product_type

e12d1686fccb1935842ed2d64cd1da13.png

多个字段去重

--DISTINCT
SELECT distinct product_name, product_type from product
--GROUP BY
select product_name, product_type from product
GROUP BY product_name, product_type

1d39a0e93dfc5fd9af22c7c7ae90bb9f.png

执行效率

select ,

from
where 查询条件
group by 分组类别
having 对分组结果指定条件

order by (desc)
limit 数字

279f6a5c5e2c63efafd929fdb541adc3.png

SQL语言的运行顺序,先执行上图中的第一步,然后再执行select子句,最后对结果进行筛选。distinct是在select子句中,而group by在第一步中,所以group by去重比distinct去重在效率上要高。

0425f50bf1368431f99dba388e90e51e.png

不求点赞 只求有用

454385e9067cf02c72964aab8dda52af.png    388b6c743bc71b437f70a37047280cd2.png   

扫码关注

点个在看 你最好看

ad07acaa5041a08ce4ca4c7b0354894d.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值