今天遇到一个需求 需要计算每个订单工序错误代码的错误率的top3,话不多说我就干了起来,现在我拿一个订单作为案例。
知识点:
1.统计出每项订单错误代码错误数的前三位
2.sql多行合并为一行
3.以,分割字符串
4.保留两位小数
首先我分组统计出了一个订单对应的数量,这个比较简单。
我要得到订单对应错误代码 failcode 的前三怎么搞?我试了之前网上有些大神的方法
select * from 表名 a where (select count(1) from 表名 where OrderID=a.OrderID and codenum>=a.codenum)<=3
这方法有些只能取两位,有些能取三位,不能循环比较。接下里用这个:
select * from
(select t.*,row_number() over(partition by orderID order by codenum desc) as flag from 表名 t) a where flag<=3