0%

Oracle分组过滤数据总结

没怎么用过Oracle,以为差不多,这不就遇到一个坑,因为连表查询,表关系为一对多,要把连查出来的数据过滤为两条,也就是对b表数据进行分组或者说过滤吧,

1.首先尝试了group by,发现对单个字段是可以的,也就是select后面只能是单个字段,这个字段也是分组的字段,这样是有效的,否则无效;

2.尝试distinct,发现发现只能过滤某一个字段生效,多个无效,而一般实际开发情况,是整条数据都是需要的;

3.最后百度很久才找到关键字 row_number() OVER(PARTITION BY 使用子查询对重复数据按照123…排序,再条件需要为1的,直接仿照着写就好,需要使用聚合函数,就直接在外层的select后面写,替换掉查全部;

1
2
3
4
5
6
7
SELECT
t.*
FROM
(SELECT row_number() over (partition BY kas.content ORDER BY kas.CREATE_TIME DESC)rn, kas.* FROM KH_APPRAISE_SCORE kas WHERE
kas.DEL_FLAG = '0' AND kas.MASTER_ID = #{id}) t
WHERE
t.rn = 1
----------本文结束感谢您的阅读----------