首页 > 数据库 >》》》oracle中用row_number查询最早一条数据

》》》oracle中用row_number查询最早一条数据

时间:2023-09-22 14:35:38浏览次数:46  
标签:over partition number score oracle 排序 row

转载:SQL中row_number() over(partition by)的用法说明_Mysql_脚本之家 (jb51.net)

select * from {
   select 
   cj.xh,--学生学号
   cj.cj,--学生成绩
   cj.ks_sj,--考试时间
   row_number() over(partition by cj.xh order by cj.ks_sj desc) num
   from ks_cj cj --考试成绩表
}
where num = '1'

 

这篇文章主要介绍了SQL中row_number() over(partition by)的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

 
目录

row_number 语法

ROW_NUMBER()函数将针对SELECT语句返回的每一行,从1开始编号,赋予其连续的编号。在查询时应用了一个排序标准后,只有通过编号才能够保证其顺序是一致的,当使用ROW_NUMBER函数时,也需要专门一列用于预先排序以便于进行编号

partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,分区函数一般与排名函数一起使用。

原始表score

s_id 表是学生编号,c_id表是课程编号,s_score 表是学生对应的课程分数

在这里插入图片描述

1.要求:得出每门课程的学生成绩排序(升序)

----因为是每门课程的结果,并且要排序,所以用row_number

1 select * ,row_number() over (partition by c_id order by s_score) from score;

返回结果:

在这里插入图片描述

2:进一步要求:得出每门课程的学生成绩,并且按照70分作为分割线排序—即低于70分的排序,高于70分的排序

1 select * ,row_number() over (partition by c_id,(case when s_score>70 then 1 else 0 end) order by s_score) from score;

返回结果:

在这里插入图片描述

row_number() over(partition by 列名1 order by 列名2 desc)的使用 

表示根据 列名1 分组,然后在分组内部根据  列名2 排序,而此函数计算的值就表示每组内部排序后的顺序编号,可以用于去重复值

与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码.

---查询所有姓名,如果同名,则按年龄降序

1 SELECT name,age,detail,ROW_NUMBER() OVER(PARTITION BY name ORDER BY age DESCFROM TEST_Y;

通过上面的语句可知,是按照name字段分组,按age字段排序的。

如果只需查询出不重复的姓名即可,则可使用如下的语句, 由查询结果可知,姓名相同年龄小的数据被过滤掉了;

1 SELECT   *   FROM   ( SELECT   name ,age, detail ,ROW_NUMBER()   OVER (   PARTITION   BY   name  ORDER   BY   age  DESC )RN   FROM   TEST_Y ) WHERE   RN=   1 ;

分页

--先做一个子查询,先按id1进行排序,排序完后,给每条记录进行了编号

--然后再将子查询做为一张表,就可以进行分页了

1 2 3 select *   from (select t.*,row_number() over(order by t.id1 asc) as rn from demo t) d   where d.rn between 1 and 2

标签:over,partition,number,score,oracle,排序,row
From: https://www.cnblogs.com/lidar/p/17722284.html

相关文章

  • 华为云oracle11.2.4安装
    centos7.932核64g200g2Thostnamectl set-hostnameo11gecho"10.240.0.200o11g">>/etc/hostswgethttps://ecs-instance-driver.obs.cn-north-1.myhuaweicloud.com/datadisk/LinuxVMDataDiskAutoInitialize.shbashLinuxVMDataDiskAutoInitialize.sh  ......
  • Oracle中引号的作用
    Oracle中,双引号""的作用:区分大小写:Oracle中对象(如表、列、视图等)的名称默认是不区分大小写的。使用双引号将区分对象名词的大小写。例如,"myTable"和"MYTABLE"被视为不同的表名。使用特殊字符或保留字作为对象名称:例如,可以创建一个名为"SELECT"的列名。引用不规范......
  • typescript_error_运算符“+”不能应用于类型“Number”和“Number”
    functionadd_(num1:Number,num2:Number){returnnum1+num2}console.log(add_(5,7))Number是一个Interface,number才是表示类型,换成小写就可以了functionadd_(num1:number,num2:number){returnnum1+num2}console.log(add_(5,7))......
  • [20230908]Oracle Index Range Scan with LIKE Condition on Wildcard '_'.txt
    [20230908]OracleIndexRangeScanwithLIKEConditiononWildcard'_'.txt--//昨天看链接:http://ksun-oracle.blogspot.com/2023/09/oracle-index-range-scan-with-like.html,当时一下子没有反应过来,--//作者这样查询怎么会有这么大区别呢?仔细看题目才明显原来查询的字符串里面......
  • Oracle释放异常锁表SQL
    查询锁对象selectcount(*)fromv$locked_object;select*fromv$locked_object;查询被锁的表selectb.owner,b.object_name,a.session_id,a.locked_mode,a.object_idfromv$locked_objecta,dba_objectsbwhereb.object_id=a.object_id;查询锁的sessionselectb.username,......
  • Oracle释放异常锁表SQL
    查询锁对象selectcount(*)fromv$locked_object;select*fromv$locked_object;查询被锁的表selectb.owner,b.object_name,a.session_id,a.locked_mode,a.object_idfromv$locked_objecta,dba_objectsbwhereb.object_id=a.object_id;查询锁的sessionselectb.username,b......
  • Oracle 创建表空间和用户
    Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创建自己的数据库。   对于初学者来说,为了避免麻烦,可以用'DatabaseConfigurationAssistant'向导来创建数据库。   创建完数据库后,并不能立即在数据库中建表,必须先创建该数据库的用户,并且为该用户指......
  • oracle数据库文件中的导入\导出(imp/exp命令)
    Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中。执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,DOS中可以执行时由于在oracle8i中 安装目录ora81BI......
  • RHEL5开启和关闭oracle实例以及自启动
    启动数据库实例,分为两步:第一步,启动监听;第二步,启动数据库实例。一、如何启动数据库实例 1.进入到sqlplus启动实例[oracle@redhat~]$su-oracle                                --“切换到oracle用户”Password:[oracle@redhat~]$lsnrctls......
  • RHEL5 上安装 oracle10g 过程和步骤
    安装配置系统环境:(1)安装linux,所由服务都不选择,只是选择安装开发工具,不要安装防火墙(当然也可以在后面关闭)(2)打开终端,执行如下命令,检查安装包,没有的都要安装(一般在dis2和dis3上)#RedHatAS51--make,glibc,libaio#RedHatAS52--compat-libstdc++,compat-gcc-34,......