表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...