Oracle | 您所在的位置:网站首页 › oracle中table函数 › Oracle |
文章目录
前言介绍demo案例测试测试前的准备rank()dense_rank()row_number()
前言
分析函数在oracle中比较常见,但用的不多,今天有幸碰见,索性做一次使用的总结说明。 介绍oracle中的分析函数,常见的有下面的三种: rank() 当排序的数据值是一样的时候,排序相同,但需要跳跃。 什么叫排序跳跃? 如下所示: 当出现排名一样的时候,排名是一样的,但是如果出现间隔,则排序会出现不一致的现象。 dense_rank() 排序的数据值是一样的时候,排序相同,序号连续。 如何理解上面所说的序号连续? row_number() 排序好的数据值一样的时候,排序不同,类似 rownum。 创建表并新增测试数据: create table XJ_TEST_LTOH ( stuid VARCHAR2(20), stuname VARCHAR2(40), coursename VARCHAR2(40), score INTEGER ) insert into xj_test_ltoh (STUID, STUNAME, COURSENAME, SCORE) values ('sc202201001', '张三', '数学', 40); insert into xj_test_ltoh (STUID, STUNAME, COURSENAME, SCORE) values ('sc202201001', '张三', '语文', 50); insert into xj_test_ltoh (STUID, STUNAME, COURSENAME, SCORE) values ('sc202201001', '张三', '理综', 120); insert into xj_test_ltoh (STUID, STUNAME, COURSENAME, SCORE) values ('sc202201011', '李四', '数学', 40); insert into xj_test_ltoh (STUID, STUNAME, COURSENAME, SCORE) values ('sc202201011', '李四', '语文', 45); insert into xj_test_ltoh (STUID, STUNAME, COURSENAME, SCORE) values ('sc202201011', '李四', '理综', 120); insert into xj_test_ltoh (STUID, STUNAME, COURSENAME, SCORE) values ('sc202201031', '王五', '数学', 54); insert into xj_test_ltoh (STUID, STUNAME, COURSENAME, SCORE) values ('sc202201031', '王五', '语文', 50); insert into xj_test_ltoh (STUID, STUNAME, COURSENAME, SCORE) values ('sc202201031', '王五', '理综', 100);执行后,表中的数据如下所示: 值相同,排名相同,序号跳跃 select rank() over(order by score desc) nums ,t.score from xj_test_ltoh t值相同,排名相同,排名序号连续。 select dense_rank() over(order by score desc) nums ,t.score from xj_test_ltoh t序号连续,即使值相同。 select row_number() over(order by score desc) nums ,t.score from xj_test_ltoh t |
CopyRight 2018-2019 实验室设备网 版权所有 |