欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql使用自定義序列實現(xiàn)row_number功能(步驟詳解)

 更新時間:2021年12月22日 08:22:29   作者:水木青楓  
這篇文章主要介紹了mysql使用自定義序列實現(xiàn)row_number功能,本文分步驟通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下

看了一些文章,終于知道該怎么在 mysql 里面實現(xiàn) row_number() 排序

話不多說,show you the code:

第一步:建表:

create table grades(
`name` varchar(10),
`subject` varchar(10),
`score` int(10)
)

第二步:寫入數(shù)據(jù)

insert into grades(name, subject, score)
values('小明', '語文', 85),
('小華', '語文', 89),
('小李', '語文', 91),
('小芳', '語文', 93),
('小明', '數(shù)學', 77),
('小華', '數(shù)學', 95),
('小李', '數(shù)學', 83),
('小芳', '數(shù)學', 88),
('小明', '英語', 90),
('小華', '英語', 92),
('小李', '英語', 85),
('小芳', '英語', 88)

數(shù)據(jù)如下:

第三步:
需求:找出各科目單科第二的同學

首先,先排序:

select name, subject, score 
from grades
order by subject, score desc

數(shù)據(jù)如下:

然后,每個科目按照分組排序

select (@i:=case when @subject_pre=t1.subject then @i+1 else 1 end) as rn,
t1.*,
(@subject_pre:=subject) 
from (
    select name, subject, score 
    from grades
    order by subject, score desc
) t1, 
(select @i:=0, @subject_pre:='') as t2
group by subject, score
order by subject, score desc

解釋一下:
添加一個比較項 subject_pre, 記錄前一個科目是什么。
再加上一個自增的序列,實現(xiàn)index+1的功能。
因為數(shù)據(jù)已經是有序的,如果指向的科目和存儲的前一個科目相同,那么序號+1,否則的話,序號從1開始重新計算。
這樣就實現(xiàn)了分組排序。

最后,把 rn=2 的數(shù)據(jù)取出來

select name, subject, score from(
select (@i:=case when @subject_pre=t1.subject then @i+1 else 1 end) as rn,
t1.name,
t1.subject,
t1.score,
(@subject_pre:=subject) 
from (
select name, subject, score 
from grades
order by subject, score desc
) t1, 
(select @i:=0, @subject_pre:='') as t2
group by subject, score
order by subject, score desc
) t
where rn=2

最后結果如下:

這樣就使用mysql實現(xiàn)了row_number()的功能。

在網上找的資料,很多沒寫清楚,這里特地用一個示例把這個實現(xiàn)講清楚了,希望對你有幫助!

到此這篇關于mysql使用自定義序列實現(xiàn)row_number功能的文章就介紹到這了,更多相關mysql?row_number功能內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論