请问Oracle有没有这样的功能?


抱歉,因为问题难以表述,只能这样提问了。 我想实现的是:先按某个字段归类后求出最大值,然后再求出值为最大的记录的其他信息(非group by 中的字段),这时会出现多个记录的值都为最的记录。 比如:表中 F_XMBH(项目编号) , F_XMMC,F_JE(金额) , F_USER(使用人) ,我想按 项目编号 来归类求出 金额最大 的记录, 然后求出展示金额最大的记录的 使用人 情况,这时有可能项目值为最的的项目编号会有 多条 ,即使用人a和b, 都对应最大值,但在展示的时候,我希望是项目编号只有 一条 ,把使用人按 'a,b' . 展示的效果如下: 最大值记录:

F XMBH F XMMC MAX(F_JE)
001 AA 123,00.00
0002 BB 1456.00

使用人情况:

F_XMBH F_XMMC F_JE F_USER
001 AA USER_A 123,00.00
001 AA USER_B 123,00.00

展示效果:

F XMBH F XMMC F JE F USER
001 AA USER A,USER B 123,00.00

这个功能我知道通过多次遍历可以实现,但是业务中数据量比较大,能否通过oracle自身的功能实现这个效果。

关系型数据库 数据库 数据库性能优化 oracle

饥饿de猫咪 10 years, 6 months ago

10g版本:
select FXMBH, FXMMC, wmsys.wm_concat(FUSER), max(FJE) from t group by FXMBH, FXMMC

由于wmsys.wm_concat是内部函数,如果是11g版本的话建议使用listagg函数替代,例如:
LISTAGG(FJE) WITHIN GROUP (ORDER BY FJE)

靜靜D藍調 answered 10 years, 6 months ago

Your Answer