首页 > 数据库 >oracle的排序函数以及mysql使用变量实现排序

oracle的排序函数以及mysql使用变量实现排序

时间:2024-05-29 16:46:10浏览次数:24  
标签:insert ccx test weather mysql oracle rn 排序

oracle的排序函数

  • rank()函数:跳跃排序,如果两个第一,则后边是第3
  • dense_rank()函数:连续排序,,再如两个第一,则后边是第2
  • row_number()函数:连续排序,没有并列的情况

create table ccx_test(
	course varchar(10),
	score int 
);
insert into ccx_test values(1,70);
insert into ccx_test values(1,100);
insert into ccx_test values(1,80);
insert into ccx_test values(1,90);
insert into ccx_test values(1,60);
insert into ccx_test values(2,70);
insert into ccx_test values(2,80);
insert into ccx_test values(2,60);
insert into ccx_test values(2,70);
insert into ccx_test values(2,50);

--row_number()顺序排序
select 
    course
		,score
    ,row_number() over(partition by course order by score desc) as rank
from ccx_test;

--rank() 跳跃排序,如果两个第一,则接下来是第三
select 
    course
		,score
    ,rank() over(partition by course order by score desc) rank
from ccx_test;

--dense_rank() 连续排序,如果两个第一,则接下来是第二
select 
    course
		,score
    ,dense_rank() over(partition by course order by score desc) rank
from ccx_test;

mysql使用变量实现oracle的rank排序

CREATE TABLE ccx_test_weather(
  id int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  record_date date NULL DEFAULT NULL COMMENT '日期',
  temperature int(10) NULL DEFAULT NULL COMMENT '温度',
  PRIMARY KEY (id) USING BTREE
);

INSERT INTO ccx_test_weather VALUES (1, '2023-03-01', 10);
INSERT INTO ccx_test_weather VALUES (2, '2023-03-02', 25);
INSERT INTO ccx_test_weather VALUES (3, '2023-03-03', 20);
INSERT INTO ccx_test_weather VALUES (4, '2023-03-04', 30);
INSERT INTO ccx_test_weather VALUES (5, '2023-03-05', 35);
INSERT INTO ccx_test_weather VALUES (6, '2023-03-05', 35);
INSERT INTO ccx_test_weather VALUES (7, '2023-03-06', 20);
INSERT INTO ccx_test_weather VALUES (8, '2023-03-07', 40);
select * from ccx_test_weather
普通排序(直接挨个加1)
select c.*, 
	 @rn := @rn + 1 rn
from ccx_test_weather c, (select @rn := 0) init
order by temperature

并列排序(数据相同则排名相同,顺序排名)
select c.*, 
	@rn := if(@tmp = temperature, @rn, @rn + 1) rn
	,@tmp := temperature
from ccx_test_weather c, (select @rn := 0, @tmp := NULL, @incrn := 1) init
order by temperature

并列排序(数据相同则排名相同,跳跃排名)
select c.*, 
	@rn := if(@tmp = temperature, @rn, @incrn) rn
 	,@tmp := temperature
 	,@incrn := @incrn + 1
from ccx_test_weather c, (select @rn := 0, @tmp := NULL, @incrn := 1) init
order by temperature

如果想要实现组内排序把要分组的字段作为第一个排序字段即可

标签:insert,ccx,test,weather,mysql,oracle,rn,排序
From: https://www.cnblogs.com/ccx-lly/p/18220598

相关文章

  • mysql 函数实现父子查询
    DELIMITER//CREATEFUNCTIONget_all_father(rootIdINT)RETURNSvarchar(1000)DETERMINISTICBEGINDECLAREsTempVARCHAR(1000);DECLAREsTempParVARCHAR(1000);SETsTemp='';SETsTempPar=rootId;#循环递归WHILEsTemp......
  • mysql实现oracle的start with递归查询
    oracle查询语句selectdept_codefrom表名startwithdept_code='41311046430000001'connectbyPRIORid=PARENT_ID结果如下:改为mysql查询,实用函数实现selectsd.*from (select*from表名)sd, (select@pid:=(selectidfrom表名wheredept_code='4131......
  • react使用antd实现表格的时间排序
    importReactfrom'react';import{Table}from'antd';importmomentfrom'moment';constdata=[{key:'1',date:'2018-01-11T12:00:00Z',},{key:'2',date:'2......
  • 快速排序的实现
    目录一、递归        1、霍尔法:2、挖坑法:3、前后指针法:二、非递归三、完整代码:基本思想:先取这个待排序元素序列中的某一个元素最为key值,然后通过这个key值将这个序列分为两边,一边小于这个key,另一边大于这个key,然后接着对这个左边的序列和右边的序列进行相......
  • Java语言,MySQL数据库;SSM 心理咨询预约管理系统19086(免费领源码)计算机毕业设计项目推荐
    目 录摘要1绪论1.1背景及意义1.2研究现状1.3ssm框架介绍1.4论文结构与章节安排2 心理咨询预约管理系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能......
  • MySQL安装教程(详细)
    文章目录一、安装准备1.1mysql数据库下载1.2数据库运行环境下载二、安装步骤2.1开始安装2.2选择安装类型2.3选择功能2.4检测安装环境2.5功能安装2.6功能安装完成,点击next2.7产品配置,点击next2.8网络通信配置2.9帐户设置(很重要)2.10数据库实例名设置,默认next......
  • 湘潭大学软件工程专业oracle-sqlplus安装教程
    前言笔者在网上找了一些教程,但是没有装好,或者不知道啥原因,反正就是登不进去老师要求的系统,连接不上服务器,非常苦恼,请教了一下同学,终于弄好了,本文希望能帮助到和我一样有相同困扰的同学下载压缩包首先是下载安装包,按照我的理解,应该是下载下面这个压缩包就行了先打开老师......
  • mysql GROUP_CONCAT()函数
    一、GROUP_CONCAT函数语法函数语法:group_concat([DISTINCT]需要连接的字段[OrderBY排序字段ASC/DESC][Separator'分隔符'])GROUP_CONCAT()函数分隔符GROUP_CONCAT()函数默认是逗号分隔修改GROUP_CONCAT(exprSEPARATOR'分隔符')GROUP_CONCAT()函数去重G......
  • sql涉及姓名排序--2种排序选择
    第一种:按字符的编码值(ASCII或Unicode值)进行排序ORDERBYscoreDESC,SUBSTR(stuName,1,1)DESC;Oracle会比较`stuName`的第一个字符的编码值(ASCII或Unicode值)来决定顺序。第二种:按照姓氏的拼音顺序进行排序ORDERBYscoreDESC,NLSSORT(SUBSTR(stu......
  • leetCode.82. 删除排序链表中的重复元素 II
    leetCode.82.删除排序链表中的重复元素II题目思路:代码classSolution{public:ListNode*deleteDuplicates(ListNode*head){autodummy=newListNode(-1);dummy->next=head;autop=dummy;while(p->next){......