程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL分組排序

MySQL分組排序

編輯:MySQL綜合教程

MySQL分組排序


一、問題

 

產品表
有平台id 產品名稱

id ptid name
1 100 產品1
2 100 產品2
3 100 產品3
4 100 產品4
5 100 產品5
6 100 產品6
7 101 產品7
8 101 產品8
9 101 產品9
10 101 產品10
11 101 產品11

如何根據某個平台id 只取這個平台的3條數據(順序可以隨機)

id ptid name
1 100 產品1
2 100 產品2
3 100 產品3
7 101 產品7
8 101 產品8
9 101 產品9


二、建表

 

create table p_a(
  id int,
  ptid varchar(20),
  name varchar(20)
)
insert into p_a(id,ptid,name) values(1,'100','產品1');
insert into p_a(id,ptid,name) values(2,'100','產品2');
insert into p_a(id,ptid,name) values(3,'100','產品3');
insert into p_a(id,ptid,name) values(4,'100','產品4');
insert into p_a(id,ptid,name) values(5,'100','產品5');
insert into p_a(id,ptid,name) values(6,'100','產品6');
insert into p_a(id,ptid,name) values(7,'101','產品7');
insert into p_a(id,ptid,name) values(8,'101','產品8');
insert into p_a(id,ptid,name) values(9,'101','產品9');
insert into p_a(id,ptid,name) values(10,'101','產品10');
insert into p_a(id,ptid,name) values(11,'101','產品11');

三、sql

 

 

select * from (
select a.*,
case when @oldptid=ptid then @lagfield:=@lagfield+1 else @lagfield:=1 end rn,
@oldptid:=ptid
from p_a a,(select @lagfield:=0,@oldptid:='') r
) a where rn<=3

 

四、總結

MySQL根據ptid分組,分別對分組內進行標注序號,然後根據序號取出各分組內的記錄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved