over partition by与group by 的区别

Posted chenxizhaolu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了over partition by与group by 的区别相关的知识,希望对你有一定的参考价值。

  遇到这么一个需求,需要根据分类为数据库记录添加排序行,就像一个客户有多个订单,每个订单有若干产品,需要给每个订单的产品明细做一个默认排序。

  通过学习 PARTITION BY 解决了问题:

 update brands set orderindex=a.row1
 from 
 (
    select row_number() over(PARTITION BY cate.id order by cate.createdate) row1,cate.name,b2.name as bname,b2.customcategoryid,b2.id as brandid 
                            from brands b1 inner join customcategory cate on b1.id=cate.brandid
                                           inner join brands b2 on cate.id=b2.customcategoryid
    where b1.id=ab209c03-ecf7-49c2-af0f-62c66e82d412
 ) a
 where brands.id=a.brandid

  partition by与group by都是分组,究竟有何具体的区别呢?

  group by我们平时用的比较多,经常与聚合函数比如:Sum() Max() Min() Count() Avg()等一起使用。group by 就是对结果进行单纯分组计算, group by更强调的是一个整体,就是组,只能显示一个组里满足聚合函数的一条记录。

  partition by 在整体后更强调个体,能显示组里所有个体的记录。用于给结果集分组

以上是关于over partition by与group by 的区别的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:与dense_rank()over()的group by和partition的差异输出?

使用 OVER (PARTITION BY ) 而不是 Group By

oracle分析函数over partition by 和group by的区别

Dplyr 相当于 SUM over PARTITION BY

rank() over(partition by A order by B) MySQL里可以partition多个字段嘛

row_number() over(partition by a order by b desc) rn 用法