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