日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql @RN :方式ROW_NUMBER的实现方法

發(fā)布時(shí)間:2024/9/27 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql @RN :方式ROW_NUMBER的实现方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1簡介... 1

2 準(zhǔn)備... 1

2.1 環(huán)境說明... 1

3 安裝... 2

4 配置... 2

5 使用... 2

5.1 驗(yàn)證實(shí)驗(yàn)... 2

5.2 問題分析... 4

6 延展... 4

7 總結(jié)... 4

Mysql @RN :方式ROW_NUMBER的實(shí)現(xiàn)方法

1簡介

基于mysql @rownum:=@rownum+1的方式模擬實(shí)現(xiàn)row_number

2 準(zhǔn)備

2.1 環(huán)境說明

1 mysql版本10.3.13-MariaDB,同理其它mysql版本效果類似。

-- 查看mysql版本 SELECT VERSION() AS mysql_Version;

mysql_Version

10.3.13-MariaDB

-- mysql 字符集 show variables like '%char%';

Variable_name

Value

character_set_client

utf8

character_set_connection

utf8

character_set_database

utf8

character_set_filesystem

binary

character_set_results

character_set_server

utf8

character_set_system

utf8

character_sets_dir

E:\Program Files\MariaDB 10.3\share\charsets\

3 安裝

無.

4 配置

5 使用

5.1 驗(yàn)證實(shí)驗(yàn)

1) mysql里創(chuàng)建一個(gè)emp_t10表定義empid ,deptid ,salary字段的類型,插入如下10條數(shù)據(jù)驗(yàn)證。

-- 1 創(chuàng)建表并插入數(shù)據(jù) drop table if exists emp_t10; create table emp_t10 (empid int ,deptid int ,salary decimal(10,2) );insert into emp_t10 values (1,10,5500.00), (2,10,4500.00), (3,20,1900.00), (4,20,4800.00), (5,40,6500.00), (6,40,14500.00), (7,40,44500.00), (8,50,6500.00), (9,50,7500.00),(10, 20,1900.00 );-- 2 將按照部門升序、工資降序的數(shù)據(jù)插入臨時(shí)表中 create table emp_t10_tmp AS select empid,deptid,salary from emp_t10 order by deptid asc ,salary desc; -- 3 按照deptid分組,按照salary降序排名 select empid,deptid,salary,rank from ( select heyf_tmp.empid,heyf_tmp.deptid,heyf_tmp.salary,@rownum := @rownum+1 , if(@pdept= heyf_tmp.deptid,@rank:=@rank +1, @rank:= 1) as rank, @pdept:=heyf_tmp.deptid from ( -- select empid,deptid,salary from emp_t10 order by deptid asc ,salary desc select empid,deptid,salary from emp_t10_tmp) heyf_tmp ,(select @rownum:=0 , @pdept:= null ,@rank:= 0) a ) result order by deptid,rank;-- 4 建議的寫法,按照deptid分組,按照salary降序排名(這里沒用利用臨時(shí)表,order by 在兩個(gè)表cross join之后) select empid,deptid,salary,rank from ( select heyf_tmp.empid,heyf_tmp.deptid,heyf_tmp.salary,@rownum := @rownum+1 , if(@pdept= heyf_tmp.deptid,@rank:=@rank +1, @rank:= 1) as rank, @pdept:=heyf_tmp.deptid from ( select empid,deptid,salary from emp_t10 -- order by deptid asc ,salary desc -- select empid,deptid,salary from emp_t10_tmp) heyf_tmp ,(select @rownum:=0 , @pdept:= null ,@rank:= 0) a order by deptid asc ,salary desc ) result order by deptid,rank;

empid

deptid

salary

rank

1

10

5500.00

1

2

10

4500.00

2

10

20

1900.00

2

3

20

1900.00

3

4

20

4800.00

1

7

40

44500.00

1

6

40

14500.00

2

5

40

6500.00

3

8

50

6500.00

2

9

50

7500.00

1

2) 當(dāng)然在當(dāng)前的MariaDB 版本里已經(jīng)支持了ROW_NUMER,所以我們可以直接按照如下的語法實(shí)現(xiàn)想要的需求:

select empid,deptid,salary, ROW_NUMBER() OVER(PARTITION BY deptid ORDER BY salary DESC)rank?? from emp_t10;

empid

deptid

salary

rank

1

10

5500.00

1

2

10

4500.00

2

4

20

4800.00

1

10

20

1900.00

2

3

20

1900.00

3

7

40

44500.00

1

6

40

14500.00

2

5

40

6500.00

3

9

50

7500.00

1

8

50

6500.00

2

5.2 問題分析

6 延展

7 總結(jié)

暫無.有問題可以咨詢?nèi)缦?#xff1a;

總結(jié)

以上是生活随笔為你收集整理的Mysql @RN :方式ROW_NUMBER的实现方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。