前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[793]mysql表分组后取每组前几条数据

[793]mysql表分组后取每组前几条数据

作者头像
周小董
发布2020-05-07 15:04:00
6.6K0
发布2020-05-07 15:04:00
举报
文章被收录于专栏:python前行者python前行者

第一步:准备数据:

代码语言:javascript
复制
create table product(
    p_id int(10) primary key auto_increment,
    p_name varchar(10),
    p_code varchar(10)
)comment '商品表'
代码语言:javascript
复制
insert into product values
(1,'name1',1),
(2,'name2',1),
(3,'name3',2),
(4,'name4',2),
(5,'name5',4),
(6,'name6',4),
(7,'name7',3),
(8,'name8',4),
(9,'name9',2),
(10,'name10',2),
(11,'name11',3),
(12,'name12',3);

第二步:查询

需求:按照p_code字段对product表进行分组并取每组的前两条数据 SQL语句:

代码语言:javascript
复制
select * from(
select *,IF(@tmp_code=p_code,@tmp_num:=@tmp_num+1,@tmp_num:=0) 'tmp_num',@tmp_code:=p_code 'tmp_code' from product order by p_code)
a where a.tmp_num<6

sql解释:@tmp_code:=p_code表示把p_code的值临时赋值给@tmp_codeIF(@tmp_code=p_code,@tmp_num:=@tmp_num+1,@tmp_num:=0)表示如果p_code的值等于@tmp_code的话,@tmp_num自增1,这样我们就可以通过'tmp_num'这个字段来获取到每一组的前几条数据

第三步:需求完美解决 查询结果:

image.png
image.png

执行:

代码语言:javascript
复制
explain (select * from(
select *,IF(@tmp_code=p_code,@tmp_num:=@tmp_num+1,@tmp_num:=0) 'tmp_num',@tmp_code:=p_code 'tmp_code' from product order by p_code)
a where a.tmp_num<2 )

建议在开发环境不要使用order by因为这样会出现文件内排序。

各位大佬如果有更好,更加高效的方法希望可以留言交流下,谢谢

参考: https://blog.csdn.net/MTner/article/details/98336846 https://jingyan.baidu.com/article/d8072ac48d2730ec94cefd43.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档