在做系统选厂时,需要按比价单(com_no)、件号(pn)分组进行比价,选出厂家报价折算金额(convert_usd)最低,折算金额相同的情况下,选择交货期(delivery_day)最短的记录 。之前虽然想到了group by order by 之类的,但都不好分组进行内部排序,求助了同事后,同事帮写的SQL实现语句如下:
select *
from ( select row_number() over(partition by vcd.com_no, vcd.pn order by vcd.convert_usd, vcd.delivery_day) r_num,
vcd.com_no,
vcd.pn,
vcd.vender,
vcd.convert_usd,
vcd.delivery_day
from VENDER_COMPARISON_DETAIL vcd where vcd.com_no = '0107') // 对询价单号为‘0107’中的每个件进行选厂
where r_num = 1;
Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行
举个例子 :统计各班成绩排名
name class s