Oracle分析函数之Rank函数
本文主要讲述Oracle分析函数之Rank函数的用法最近接触到Oracle这个功能强大而灵活的函数。这个函数特别适用于各种统计查询,下面就来说一说。 首先存在 product 表 SELECT p.create_time,p.name,p.service_evaluate_fee,p.product_type FROM product p 表数据如下: ROW_NUMBER()SELECT row_number() OVER(PARTITION BY p.product_type ORDER BY p.update_time DESC) row_number,p.create_time,p.product_type FROM product p 执行结果如下: SQL执行意思为根据产品类型来分类的同时,根据创建时间create_time来排序 SELECT * FROM
(
SELECT row_number()
OVER(PARTITION BY p.product_type ORDER BY p.update_time DESC) row_number,p.product_type
FROM product p
) pp
WHERE pp.row_number <= 10 AND pp.row_number >5
row_number()还可以用来做分页数据,查询结果如下: RANK()SELECT rank() OVER(ORDER BY p.service_evaluate_fee DESC) rank,p.product_type FROM product p 此处不再区分不同产品,只考虑服务评估费,service_evaluate_fee 执行结果如下: DENSE_RANK()SELECT dense_rank() OVER(ORDER BY p.service_evaluate_fee DESC) rank,p.product_type FROM product p 执行结果如下: 通过上述结果的比较,我们可以发现ROW_NUMBER(),RANK(),DENSE_RANK()的区别: 当结果集中如果出现两条相同的数据,那么rank会进行跳跃式的排名, SELECT row_number() OVER(ORDER BY p.service_evaluate_fee DESC) row_num,rank() OVER(ORDER BY p.service_evaluate_fee DESC) rank,dense_rank() OVER(ORDER BY p.service_evaluate_fee DESC) dense_rank,p.product_type FROM product p 执行结果如下: 总结语法 FUNCTION_NAME(参数,…) OVER(PARTITION BY 表达式,… ORDER BY 表达式 ASC DESC) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |