一、需求抽象
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;
得到如下结果,明显不是我们想要的。
原因是mysql的执行顺序如下:
写的顺序:select ... from... where.... group by... having... order by..
执行顺序:from... where...group by... having.... select ... order by...
在order by的时候拿到的结果已经是经过分组和筛选的。
group by之后得到的几个分组如下: