一、问题描述

  查询列表时,我们有时需要对查询结果依据某个字段进行排名。

  如果每条记录在排序字段上都不相同,我们可以将原查询作为一个视图,查询其rownum,便可以实现简单排序,例如:

select rownum,e.* from emp e;

  但是,很多时候我们想用来排序的字段都是有重复值的,此时可能需要将值相同的记录名词并列,那么我们就需要用到oracle的分析函数了。

二、解决

  1.排序字段相同的名次并列,且所有名次连续

select dense_rank() over(order by sal desc) rk,e.ename,e.sal
from emp e;

3000元的员工有两个,他们的名词并列,且下一个用户的名词连续计数(区别于2)

  2.排序字段相同的名次并列,且下一个名次是跳跃排序的,比如,有两个第二名时,下一个就是第四名

select rank() over(order by sal desc) rk,e.ename,e.sal
from emp e;

三、其他

  有时,我们需要将不同部门下的员工进行排名,此时,我们需要使用

row_number() over(partition by column1 order by column2)

  按照column1分组,然后在组内,按照column2排序。

select row_number() over(partition by e.job order by e.sal) rk,e.job,e.ename,e.sal
from emp e;

四、扩展

  需求:统计用户签到排名

  

  每个用户每次签到生成一条数据,统计每个用户签到的总次数然后排名,为用户显示签到排名。

1.连续排名,相同次数的用户名次并列

select dense_rank()over(order by cnt desc) RANKING,b.* from (
select count(1) cnt, user_id
from MIC_TD_EXERCISE_SIGNIN group by user_id order by cnt DESC) b;

2.不连续排名

select rank() over(order by cnt desc) ranking,b.* from (
select count(1) cnt, user_id
from MIC_TD_EXERCISE_SIGNIN group by user_id order by cnt DESC) b;

oracle——分析函数——排序值分析函数的更多相关文章

  1. oracle 10g函数大全--分析函数

    oracle分析函数--SQL*PLUS环境 一.总体介绍 12.1 分析函数如何工作 语法 FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达 ...

  2. Oracle SQL高级编程——分析函数(窗口函数)全面讲解

    Oracle SQL高级编程--分析函数(窗口函数)全面讲解 注:本文来源于:<Oracle SQL高级编程--分析函数(窗口函数)全面讲解> 概述 分析函数是以一定的方法在一个与当前行相 ...

  3. Oracle根据字段值找到表名和列名

    方法1: --Oracle 根据字段值查询其所在的表.字段 DECLARE CURSOR cur_query IS SELECT table_name, column_name, data_type ...

  4. SQL数据库查询一张表新建一个排序字段并根据某列的排序存储排序值

    现在有一张表如下Id Name Age Classify Score1 张一 18 一班 122 张二 17 二班 19 3 张三 19 三班 30 我跟据他们的分数进行排名 再去新建一个列存储排序值 ...

  5. Oracle-分析函数之排序值rank()和dense_rank()

    聚合函数RANK 和 dense_rank 主要的功能是计算一组数值中的排序值. 在9i版本之前,只有分析功能(analytic ),即从一个查询结果中计算每一行的排序值,是基于order_by_cl ...

  6. oracle设置默认值无效

    一次做农行的项目,在向一个表插入数据时我们要求插入字符类型的操作日期和时间,我们这边当时采取的是给日期和时间字段设置默认值的方法:下面我简单还原一下当时的表结构 -- Create table cre ...

  7. ES排序值相同顺序随机的问题

    ES排序值相同顺序随机的问题 code[class*="language-"] { padding: .1em; border-radius: .3em; white-space: ...

  8. Oracle分析函数-排序排列(rank、dense_rank、row_number、ntile)

    (1)rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名. (2)dense_rank函数返回一个唯一的值, ...

  9. oracle数据库函数之============‘’分析函数和聚合函数‘’

    1分析函数 分析函数根据一组行来进行聚合计算,用于计算完成狙击的累积排名等,分析函数为每组记录返回多个行 rank_number() 查询结果按照次序排列,不存在并列和站位的情况,可以用于做Oracl ...

随机推荐

  1. linux中mail函数不能发送邮件

    没有安装或启动 sendmail 组件 解决办法 我是新手,命令不熟,所以写的很详细,老鸟勿喷哦 1.重新安装 sendmail 组件,我用的是 CentOS ,使用下面的命令安装 代码如下 复制代码 ...

  2. windows时间同步出错

    http://jingyan.baidu.com/article/fd8044faf1f7ae5030137a7d.html

  3. MATLAB 生成 COM 步骤

    环境: 操作系统:windows xp sp3 MATLAB:Version 7.1.0.246(R14) Service Pack 3 第一步:安装编译器(如果已经安装则可跳过此步) 在MATLAB ...

  4. 6个超炫酷的HTML5电子书翻页动画

    相信大家一定遇到过一些电子书网站,我们可以通过像看书一样翻页来浏览电子书的内容.今天我们要分享的HTML5应用跟电子书翻页有关,我们精选出来的6个电子书翻页动画都非常炫酷,而且都提供源码下载,有需要的 ...

  5. Eclipse中tomcat之后,tomcat的相关配置会被Eclipse重置

    之前用MyEclipse,在tomcat的conf中修改了配置文件,启动就OK了. 现在改用Eclipse,发现改了,之后发现没有用,Eclipse重启tomcat之后,配置文件就被重置了. 众里寻他 ...

  6. Less 导入命令 @import

    在这个less文件上想导入另一个less文件, 连在同级的文件里直接可用文件名 @import url('css.less')或@import rul(css) 连下级的文件 @import url( ...

  7. window store app 附件读取

    public static async Task<bool> DisplayApplicationPicker(string folderName, string fileName) { ...

  8. c#枚举自定义,用于数据绑定。

    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Enum)] public ...

  9. How to achieve dialog with lookup control

    How to create a dialog with the lookup as a control, the other control SalesId ItemId lookup is the ...

  10. Optimize str2date function

    The job can be any string date format convert to AX date format. so that, Do not need to specify str ...