MySQL之分組選擇資料

2021-08-10 02:19:41 字數 2536 閱讀 3238

/*用到的表*/

drop

table

ifexists

`friends`;

/*悟空朋友表*/

create

table

`friends` (

`id`

int(3) not

null,/*sql server中不能指定int長度*/

`user_name`

varchar(30) default

null,

`type`

varchar(30) default

null

) engine=innodb default charset=utf8;

insert

into

`friends`

values ('1', '孫悟空', 'friends');

insert

into

`friends`

values ('2', '牛魔王', 'friends');

insert

into

`friends`

values ('3', '蛟魔王', 'friends');

insert

into

`friends`

values ('4', '鵬魔王', 'friends');

insert

into

`friends`

values ('5', '獅駝王', 'friends');

drop

table

ifexists

`qujing`;

/*取經表*/

create

table

`qujing` (

`id`

int(3) not

null,

`user_name`

varchar(30) default

null,

`type`

varchar(30) default

null

) engine=innodb default charset=utf8;

insert

into

`qujing`

values ('1', '唐僧', 'qujing');

insert

into

`qujing`

values ('2', '豬八戒', 'qujing');

insert

into

`qujing`

values ('3', '孫悟空', 'qujing');

insert

into

`qujing`

values ('4', '沙僧', 'qujing');

分組查詢:選出每組前兩名

select d.user_name ,c.timestr,kills

from(

select user_id,timestr,kills,(select

count(*) from

user_kills b where b.user_id=a.user_id and a.kills<=b.kills)as cnt

from user_kills a

group

by user_id,timestr,kills

) c join user1 d on c.user_id=d.id

where cnt<=2

每個人殺怪最多的前兩個日期

select  a.user_name,b.timestr,b.kills

from user1 a join user_kills b

on a.id=b.user_id

where user_name=』孫悟空』

order

by b.kills desc

limit 2

查詢出孫悟空殺怪最多的前兩天是哪兩天

注意:在mysql中不支援row_number()函式

優化方式1:採用roe_number函式,進行分割槽排序

優化方式2:

select  d.user_name,c.timestr,kills  from(

select user_id,timestr,kills,(select

count(*) from user_kills b

where b.user_name =a.user_id and a.kills <=b.kills) as cnt

from user_kills a group

by user_id,timestr,kills ) c join user1 d

on c.user_id=d.id where cnt<=2;

MySQL之分組查詢(GROUP BY)

在 mysql select 語句中,允許使用 group by 子句,將結果集中的資料行根據選擇列的值進行邏輯分組,以便能彙總表內容的子集,實現對每個組而不是對整個結果集進行整合。語法格式如下 group by asc desc 語法說明如下 注意 group by 子句中的各選擇列必須也是 se...

mysql 隨機分組 Mysql 分組選擇

mysql 分組選擇與group concat 在其他的資料庫中我們遇到分組選擇的問題時,比如在分組中計算前10名的平均分 我們可以使用row number over 比較方便的得到。但是在mysql中,問題就被拋了出來,因為mysql並沒有乙個rownum內建資料元組訪問方式。在這裡我提供三種方式...

mysql 分組子 mysql 子選擇和分組

我有兩個表 main id main,field1,過濾器 main logs 5,000萬行 auto inc,id main,路徑 我在尋找以下結果 id main,field1,最常見的路徑 我嘗試了以下查詢 select id main,field1,select path,count as...