最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

如何得到Mysql每个分组中的第N条记录

来源:懂视网 责编:小采 时间:2020-11-09 09:17:08
文档

如何得到Mysql每个分组中的第N条记录

如何得到Mysql每个分组中的第N条记录:问题背景1) 限制:每个用户在一个类目下,最多享受4单满送优惠。即统计享受了满送优惠的订单数时需要排除掉同一类目下第四单以后的订单如何得到每个用户同一类目下第四单ID呢?select fourth(id) from order group by user_id, category
推荐度:
导读如何得到Mysql每个分组中的第N条记录:问题背景1) 限制:每个用户在一个类目下,最多享受4单满送优惠。即统计享受了满送优惠的订单数时需要排除掉同一类目下第四单以后的订单如何得到每个用户同一类目下第四单ID呢?select fourth(id) from order group by user_id, category

问题背景

1) 限制:每个用户在一个类目下,最多享受4单满送优惠。

即统计享受了满送优惠的订单数时需要排除掉同一类目下第四单以后的订单

如何得到每个用户同一类目下第四单ID呢?

select fourth(id) from order group by user_id, category;

可惜Mysql并没有分组函数可以方便的得到每组中第四个id。但可以有变通方案, 如有如下的表

select * from t;
+----+--------+----------------------------------+
| id | status | user_id |
+----+--------+----------------------------------+
| 1 | 10 | 24e568a88fae11e6bb0650b497d97cdd |
| 2 | 10 | 24e568a88fae11e6bb0650b497d97cdd |
| 3 | 20 | 24e568a88fae11e6bb0650b497d97cdd |
| 4 | 20 | 24e568a88fae11e6bb0650b497d97cdd |
| 5 | 10 | e8669ac28fae11e6bb0650b497d97cdd |
| 6 | 20 | e8669ac28fae11e6bb0650b497d97cdd |
| 7 | 10 | e8669ac28fae11e6bb0650b497d97cdd |
| 8 | 20 | e8669ac28fae11e6bb0650b497d97cdd |
| 9 | 10 | e8669ac28fae11e6bb0650b497d97cdd |
+----+--------+----------------------------------+

如何得到每个用户第二次成功支付(status='10')的订单呢?

QQ图片20161122092324.png

方法一 -- 逐个查询

select * from t where user_id = '24e568a88fae11e6bb0650b497d97cdd' and status = '10' order by id limit 1,1;
+----+--------+----------------------------------+
| id | status | user_id |
+----+--------+----------------------------------+
| 2 | 10 | 24e568a88fae11e6bb0650b497d97cdd |
+----+--------+----------------------------------+

方案二 -- 一次性查询

SELECT 
 *
FROM
 (SELECT 
 id,
 user_id,
 @rank:=IF(@current_user_id = user_id, @rank + 1, 1) rank,
 @current_user_id:=user_id
 FROM
 (SELECT @current_user_id:=NULL, @rank:=NULL) vars, t
 WHERE
 t.status = '10'
 ORDER BY user_id , id) a
WHERE
 rank = 2;
 
+----+----------------------------------+------+----------------------------------+
| id | user_id | rank | @current_user_id:=user_id |
+----+----------------------------------+------+----------------------------------+
| 2 | 24e568a88fae11e6bb0650b497d97cdd | 2 | 24e568a88fae11e6bb0650b497d97cdd |
| 7 | e8669ac28fae11e6bb0650b497d97cdd | 2 | e8669ac28fae11e6bb0650b497d97cdd |

原理解释

先按user_id和id顺序排序, 然后从1开始分配序号,同一用户就递增,不同用户则重新从1开始。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

如何得到Mysql每个分组中的第N条记录

如何得到Mysql每个分组中的第N条记录:问题背景1) 限制:每个用户在一个类目下,最多享受4单满送优惠。即统计享受了满送优惠的订单数时需要排除掉同一类目下第四单以后的订单如何得到每个用户同一类目下第四单ID呢?select fourth(id) from order group by user_id, category
推荐度:
标签: 记录 分组 如何
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top