mysql 查詢分組裡的第n條資料,前n條資料

2021-10-23 10:31:19 字數 1272 閱讀 5031

select uname, ***, salary, address, new_rank

from

( select uname, ***, salary, address,

# 如果臨時變數等於 address, 就+

1, 否則從1開始

if(@tmpaddress

= address,

@rank:=

@rank+1

,@rank:=

1) as new_rank,

@tmpaddress

:= address as tmpaddress #定義臨時變數

from (select t.*,

@tmpaddress:=

'',@rank:=

1 from person t order by address, salary desc) tb_a

) tb

where new_rank <=

3; #查詢前分組前3條資料

# where new_rank =

3; 查詢第三條資料

sql說明:

1、 首先將所有結果查出,並且給每個位址中的每條資料增加唯一識別符號(遞增),相當於將資料以 位址分組,每組中的資料都有乙個序號 new_rank,表示當前資料是當前分組中的第幾條;

2、 @tmpaddress := address 定義了乙個變數,變數的值為 address,沒次都將當前資料中的 address 賦值給 @tmpaddress 變數;

3、 語句解析:

if

(@tmpaddress

= address,

@rank:=

@rank+1

,@rank:=

1)# 如果 @tmpaddress 變數的值和當前 address相同,則序號加1,否則,序號從1開始重新計數

# @tmpaddress 據上一步說明,@tmpaddress 應該儲存的是上乙個 address 的值

查詢完成後 new_rank 中儲存的將是每條資料在每個(位址分組)中的唯一序號,然後過濾序號小於 3 的則是每個分組的前三個。

原始資料

參考:

mysql查詢第n到第m條資料

mysql如何指定查詢一張表的查詢結果,如最後5行記錄和最前5行記錄 我們以student表為例,裡面有三個字段 id,name,age,其中id為主健,為自增,裡面共有10條記錄,如下所示。mysql select from student id name age 1 li 11 2 zh 12 ...

mysql隨機查詢n條資料

遇到乙個業務需求是隨機查詢n條資料,一開始使用這種寫法 select from table order by rand limit n後來發現這種寫法的查詢效率極低,並且官方也不推薦使用。又經過查詢發現網上很多教程更靠譜的寫法如下 select from table as t1 join selec...

查詢表中第N條資料

如果表中的id是按順序排的那很簡單,相信大家都知道怎麼寫。現在問題是表中的id有些已經被刪除了,並不連貫,所以要查詢第n條資料就有些麻煩,習慣的sql寫法是這樣 select top 1 from select top n from testexam order by id desc a 應該是簡潔...