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 在整体后更强调个体,能显示组里所有个体的记录。用于给结果集分组

posted @ 2018-04-04 17:31  chenxizhaolu  阅读(414)  评论(0编辑  收藏  举报