mysql按某個列執行1 N排名的問題

2022-09-12 04:39:11 字數 1246 閱讀 2051

對所有員工的當前(to_date='9999-01-01')薪水按照salary進行按照1-n的排名,相同salary並列且按照emp_no公升序排列

create table `salaries` (

`emp_no` int(11) not null,

`salary` int(11) not null,

`from_date` date not null,

`to_date` date not null,

primary key (`emp_no`,`from_date`));

分析:本題的主要思想是復用salaries表進行比較排名,具體思路如下:

1、從兩張相同的salaries表(分別為s1與s2)進行對比分析,先將兩表限定條件設為to_date =

'9999-01-01',挑選出當前所有員工的薪水情況。

2、本題的精髓在於s1.salary <=

s2.salary,意思是在輸出s1.salary的情況下,有多少個s2.salary大於等於s1.salary,比如當s1.salary=94409時,有3個s2.salary(分別為94692,94409,94409)大於等於它,但由於94409重複,利用count(distinct

s2.salary)去重可得工資為94409的rank等於2。其餘排名以此類推。

3、千萬不要忘了group by

s1.emp_no,否則輸出的記錄只有一條(可能是第一條或者最後一條,根據不同的資料庫而定),因為用了合計函式count()

4、最後先以 s1.salary 逆序排列,再以 s1.emp_no 順序排列輸出結果

解答:select s1.emp_no, s1.salary, count(distinct s2.salary) as rank

from salaries as s1, salaries as s2

where s1.to_date ='9999-01-01'and s2.to_date ='9999-01-01'and s1.salary <= s2.salary

group by s1.emp_no

order by s1.salary desc, s1.emp_no asc

mysql 按兩列排序嗎 按兩列排序MySQL表

這可能有助於某人正在尋找通過兩列排序表的方法,但是以相似的方式。這意味著使用聚合排序功能組合兩種排序。例如,在使用全文搜尋檢索文章以及文章發布日期時,它非常有用。這只是乙個例子,但是如果你理解了這個想法,你可以找到很多要使用的聚合函式。您甚至可以對列進行加權,使其優先於一秒鐘。我的功能從兩種型別中都...

mysql兩列相加 MySQL 按兩列分組並求和

建立庫存系統。我有很多產品,每個產品都有三個不同的變數。因此,對於總庫存,我想按兩列 產品和尺寸 和總數量分組以獲得總庫存。product size quantity widget one 2 275 widget one 2 100 widget two 3 150 widget two 2 15...

mysql執行計畫列說明

本文介紹了mysql 執行計畫列說明。select查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序 三種情況 id相同,執行順序由上至下 id不同,如果是子查詢,id的序號會遞增,id值越大優先順序越高,越先被執行 id相同不同,同時存在 型別描述 簡單的select查詢,查...