SQL 查詢排名

2021-08-16 19:38:38 字數 2392 閱讀 1425

mysql語句查詢排名

思路:先將資料查詢出來,按需要排序的字段做好公升序(asc)、降序(desc),設定好排序的變數:

1、將已經排好的資料從第一條依次取出來,每取乙個資料,排序變數就增加1,直至排序完成:

(1,2,3,4,5…);

2、當出現相同的資料時,排名保持不變,此時則需要再設定乙個變數,用來記錄上一條資料的值,跟當前資料的值進行對比,如果相同,則排名不變,不相同則排名自增加1:

(1,2,2,3,4…);

3、當出現相同資料時,排名保持不變,但保持不變的資料仍會占用乙個排名位置:

(1,1,3,4,5…)。

資料準備:

資料**式:

create

table sql_sort(

area_id varchar(10),

num int

);

表內資料:

insert

into

sql_sort

values

('a',1),

('b',1),

('c',1),

('d',2),

('e',8),

('f',12),

('g',13),

('h',13),

('i',16),

('j',18);

初表查詢
select 

思路1:

不論資料是否相同,始終依次排序。

(1,2,3,4,5,6,7…)

select

area_id,

num,

@rownum := @rownum + 1

as num_tmp

from

sql_sort,

(select @rownum := 0) r

group

by area_id;

執行結果如圖:

思路2:

只要資料有相同的排名就一樣,排名依次排序。

(1,1,2,3,4,4,5…)

select

area_id,

num,

case

when @rowtotal = num then @rownum

when @rowtotal := num then @rownum := @rownum + 1

when @rowtotal := 0

then @rownum := @rownum +1

endas rownum

from

sql_sort,

(select @rownum := 0 ,@rowtotal := null) r

group

by area_id;

執行結果如圖:

思路3:

只要資料有相同的排名就一樣,但是相同排名也佔位,排名依次排序。

(1,1,3,4,5,5,7…)

select

area_id,

num,

@rownum := @rownum + 1

as num_tmp,

@incrnum := case

when @rowtotal = num then @incrnum

when @rowtotal := num then @rownum

end rownum

from

sql_sort,

(select @rownum := 0 ,@rowtotal := null ,@incrnum := 0) r

group

by area_id;

執行結果如圖:

Sql排名和分組排名

在很多時候,都有排名這個功能,比如排行榜,並且還需要分頁的功能,一般可以再select的時候按照某一字段 oorder by xx desc,這樣limit 查詢就可以得到排名資訊,但是有時候是需要多表連線,或者是有乙個隨機檢視,在頁面上並不是按照排名公升降序。這個時候就需要用sql來實現排名。先準...

sql分組排名

資料庫teradata 班級科目成績表 create multiset table pd portal.aaa no fallback no before journal,no after journal,checksum default banji varchar 40 character set...

排名 SQL 例項

create table qspm bmh int identity 1,1 zf int insert into qspm zf select 70 union all select 80 union all select 90 union all select 88 union all sele...