遇到这么一个需求,需要根据分类为数据库记录添加排序行,就像一个客户有多个订单,每个订单有若干产品,需要给每个订单的产品明细做一个默认排序。
通过学习 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 在整体后更强调个体,能显示组里所有个体的记录。用于给结果集分组。