问题描述

需求:

查询出每月 order_amount(订单金额) 排行前3的记录。

例如对于2019-02,查询结果中就应该是这3条:

解决方法

MySQL 5.7 和 MySQL 8.0 有不同的处理方法。

1. MySQL 5.7

我们先写一个查询语句。

根据 order_date 中的年、月,和order_amount进行降序排列。

然后,添加一个新列:order_amount(本条记录在本月中的名次)。

执行结果:

可以看到,根据年、月、订单金额排序了,还多了一列order_rank,显示出了本条记录在本月的订单金额排名情况。

上面SQL中比较个性的是这部分:

@current_month@order_rank 是我们自定义的变量。

使用 := 可以动态创建一个变量,而不需要使用 set 命令。

这句的含义:

取得order_date中的月份值,赋值给current_month,这样就可以跟踪每个月份。

这句的含义:

比较 current_month 和本条记录中的月份,如果一样,order_rank 自增1,否则,置为1

注意@current_month 是在 @order_rank 的后面,例如执行到这条记录时:

if 判断中,MONTH(order_date) 值为 2,而 current_month 值为 1,还是上条记录设置的。

还有一个需要指出的是,之所以可以这么搞,是因为order_date本身就是生序的,如果是乱序,这么做肯定是不行的

接下来,把上面的SQL语句作为一个子查询,然后使用一个 where 条件就可以轻松拿到每组的 top 3。

最终语句:

执行结果:

查询出每个分组中的 top n 条记录相关推荐

  1. mysql 分组top_MySQL:如何查询出每个分组中的 top n 条记录?

    问题描述 需求: 查询出每月 order_amount(订单金额) 排行前3的记录. 例如对于2019-02,查询结果中就应该是这3条: 解决方法 MySQL 5.7 和 MySQL 8.0 有不同的 ...

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

    问题背景 1) 限制:每个用户在一个类目下,最多享受4单满送优惠. 即统计享受了满送优惠的订单数时需要排除掉同一类目下第四单以后的订单 如何得到每个用户同一类目下第四单ID呢? select four ...

  3. MySQL: 查询出student表中每门课都大于80分的学生姓名

    查询出student表中每门课都大于80分的学生姓名 说明(小技能):获取某学生它所有课程的分数最小的一科min(score) > 80 进行分析比较即可, 连分数最小的一科都大于80分,那其他 ...

  4. MySQL数据库中如何查询分组后每组中的最后一条记录

    MySQL数据库中如何查询分组后每组中的最后一条记录 方法一 select * from messages where id in (select max(id)fom messages group ...

  5. SQL分组查询后取每组的前N条记录

    本文由 Leon 同学授权发布 这个公众号的关注者除了大部分是 Android 工程师之外还有部分后端以及前端同学,我鼓励也非常欢迎大家来投稿,其实我们并不需要把自己限定在某个领域,多学学其他语言也是 ...

  6. mysql 分组取最新的一条记录(整条记录)

    方法:mysql取分组后最新的一条记录,下面两种方法.一种是先筛选 出最大和最新的时间,在连表查询.一种是先排序,然后在次分组查询(默认第一条),就是最新的一条数据了 #select * from t ...

  7. 检索每个组中的最后一条记录-MySQL

    有一个表messages ,其中包含数据,如下所示: Id Name Other_Columns ------------------------- 1 A A_data_1 2 A A_data_2 ...

  8. 如何获取mongodb中的最后N条记录?

    我找不到任何记录在案的文件. 默认情况下,find()操作将从头开始获取记录. 如何获取mongodb中的最后N条记录? 编辑:我也希望返回的结果从最近到最近排序,而不是相反. #1楼 您可以使用so ...

  9. 检索数据_12_从表中随机返回N条记录

    从表中随机返回N条记录 需求描述 需求:从雇员表emp里随机查询5条雇员的名称和工资信息. 解决方法:使用数据库里内置的限制行数函数结合随机函数来解决. 注: 数据库数据集SQL脚本详见如下链接地址 ...

最新文章

  1. 网页图表Highcharts实践教程之外层图表区
  2. 计算营业额python_用python教你计算定投能获得多少收益
  3. MongoDB常用操作命令
  4. python flask项目过程_Python 开发过程遇到的问题
  5. 【手把手教你树莓派3 (二)】 启动wifi模块
  6. 由Object.prototype.toString.call( )引发关于toString( )方法的思考
  7. 遇到事情不计较就是善待自己
  8. git常用命令与常见错误
  9. 计算机专业马来西亚,去马来西亚读计算机专业如何
  10. C++中的异常处理(上)
  11. HTML 5 新标签
  12. 2021 Top5 免费录屏软件
  13. zigbee协议栈 任务、事件与轮询机制
  14. 为Linux发行版安装simsun.ttf
  15. 服务器装win10 稳定吗,重装win10选32位还是64位?原来这么大区别,难怪感觉电脑不好使!...
  16. react中axios封装ajax,【逆流而上】[React]axios的封装使用
  17. CSS 边框 圆角 盒子阴影 圆角 solid dotted dashed
  18. 蒙特卡罗MCNP学习汇总(二)--几何体基础,构建几何体
  19. 安徽信息技术初中会考上机考试模拟_初中会考信息技术考试模拟试题一
  20. keypad.h arduino按键操作显示

热门文章

  1. 小白如何学习操作系统?
  2. HTTP之原理,长短连接,响应码,三握四挥,八种方法
  3. 2020年中国化学发光行业发展现状、竞争格局及未来发展趋势分析,市场规模爆发式增长,成为体外诊断中的“主力军”「图」
  4. 神奇的scala操作
  5. 决策树原理和案例应用-泰坦尼克号生存预测
  6. 前端哪些技术优化方案
  7. [USACO 1.2.1] Milking Cows 挤牛奶
  8. android 调用系统照相机拍照后保存到系统相册
  9. Android新技术-热门技术
  10. java识别整段地址