mysql 分數排名

2021-08-03 03:50:59 字數 2960 閱讀 1598

表table1

欄位1:chengji(成績)      欄位2:paiming(排名)

50                              0

80                              0

70                              0

20                              0

90                              0

如何用1條mysql查詢語句,執行後讓他們變成:

欄位1:chengji(成績)      欄位2:paiming(排名)

50                              4

80                              2

70                              3

20                              5

90                              1

------solutions------

/*表結構*/

create table `t1` (                     

`xingming` char(10) default null,     

`chengji` decimal(6,2) default null,   

key `chengji` (`chengji`)               

) ;/*資料*/

insert into t1 (xingming,chengji)

values

('張一',50),

('張二',80),

('張三',70),

('張四',20),

('張五',90),

('張六',90),

('張七',70);

/*思路

排名是這樣的

先按分數排序

如果分數一樣,則並列第幾名

分數不一樣,則是他的順序號

用三個變數實現

@chengji  儲存成績

@mingci 儲存名次

@shunxu 儲存順序

*/set @chengji=0;

set @mingci=1;

set @shunxu=0;

/*sql語句*/

select xingming,chengji,mingci

from

(select xingming,chengji,

@shunxu:=@shunxu+1,

if(chengji=@chengji,@mingci,@mingci:=@shunxu) as mingci,

@chengji:=chengji

from t1 order by chengji desc) as t;

/*查詢結果

"張五""90.00""1"

"張六""90.00""1"

"張二""80.00""3"

"張三""70.00""4"

"張七""70.00""4"

"張一""50.00""6"

"張四""20.00""7"

*/------solutions------

這個表增加乙個欄位paiming,

然後用update語句來讓paiming欄位都增加上資料

/*表結構*/

create table  `t1` (                   

`xingming` char(10) default null,   

`chengji` decimal(6,2) default null,

`mingci` int(3) not null,            

key `t1` (xingming,chengji)            

) ;/*資料*/

insert into t1 (xingming,chengji)

values

('張一',50),

('張二',80),

('張三',70),

('張四',20),

('張五',90),

('張六',90),

('張七',70);

/*思路

排名是這樣的

先按分數排序

如果分數一樣,則並列第幾名

分數不一樣,則是他的順序號

用三個變數實現

@chengji  儲存成績

@mingci 儲存名次

@shunxu 儲存順序

*/set @chengji=0;

set @mingci=1;

set @shunxu=0;

/*sql語句*/

update t1,

(select xingming,chengji,

@shunxu:=@shunxu+1,

if(chengji=@chengji,@mingci,@mingci:=@shunxu) as mingci,

@chengji:=chengji

from t1 order by chengji desc) as t2

set t1.mingci=t2.mingci

where t1.xingming=t2.xingming and t1.chengji=t2.chengji;

select xingming,chengji,mingci from t1 order by mingci desc;

/*查詢結果

"張四""20.00""7"

"張一""50.00""6"

"張三""70.00""4"

"張七""70.00""4"

"張二""80.00""3"

"張五""90.00""1"

"張六""90.00""1"

*/

MySql 分數排名

題目 編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85 5 4.00 6 3.65 例如,根據上述給定...

MYSQL分數排名

編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85 5 4.00 6 3.65 例如,根據上述給定的 s...

MySQL分數排名問題

今天在做leetcode的mysql題中遇到了一道題。編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85...