mysql 每组 topn_Mysql分组取每组TopN条记录

一、需求抽象

1、商品表中包含各个商品的分类和价格;

2、查找商品表中各个分类下价格最高的前N个商品。

3、每个分类最多返回N个,价格一样的取id较小的。

表t_business_product为商品表,category_id1为分类id,price为商品价格,id为商品id。

二、需求细化及分析

A、假设N=1,既查找每个分类下价格最高的商品;

我们先通过一个错误的示例来加深下对“group by”和“order by”的理解。

SELECT * FROM t_business_product GROUP BY category_id1 ORDER BY price;

得到如下结果,明显不是我们想要的。

56580c50cb3e7e10d052f8750e806e21.png

原因是mysql的执行顺序如下:

写的顺序:select ... from... where.... group by... having... order by..

执行顺序:from... where...group by... having.... select ... order by...

在order by的时候拿到的结果已经是经过分组和筛选的。

group by之后得到的几个分组如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值