SQL語句題目rank排名

2021-09-20 03:50:49 字數 2161 閱讀 5639

mysql,sql語句題目:

實現:

1.排名不跳級,按順序排序下來:

select p.pid,p.name,p.age,tmp.rank1 from players p 

left join (select a.age,@rank :=@rank + 1 as rank1

from (select age from players group by age) a ,(select @rank:=0) tmp order by a.age

desc ) tmp on p.age=tmp.age order by p.age desc,p.name desc;

這是基本的實現方式,但是如果players表資料過大,裡面包含了子表巢狀查詢,表連線會影響執行的效率。

我想的最佳實現方式可能是:

2.排名跳級

至於第一種實現方式會不會產生笛卡爾積,參看blog:

拋開笛卡爾積不說,我認為起碼第一種實現方式,表連線是會導致查詢效率變低的。

還有個坑爹的地方:

我用的mysql版本8.0.12.。。。。寫sql開始用的as rank, 報錯了!

oracle排名函式rank

記錄乙個常見的例子供學習參考 連續排名dense rank 不連續排名rank 分組partition 不分組 原始表 t score 姓名 學科 成績 張三 english 80 李四 english 70 王五 english 90 趙六 english 80 張三 chinese 90 李四 ...

SQL語句 排名問題。

問題描述 一張表tb1中有5個字段,如下 ksh 字元型,xm 字元型,cj 整型,mc 整型,bz 字元 型。原始資料如下 ksh xm cj mc bz 000111 葉丹 170 000112 葉丹丹 170 000113 葉小 169 000114 葉小小 168 000115 葉大 168...

MySQL中實現rank排名查詢

在mysql中,不存在類似於sql server或orcal等中的rank 函式來得到排名 所以我們需要手動地寫這個rank功能。sql語句中,使用 來定義乙個變數。如 abcsql語句中,使用 來給變數賦值,abc 123,則變數abc的值為123sql語句中,if a,b,c 表示,如果a條件成...