如何分组查询最高金额的商品?
1. 问题描述?
表结构:
要求:
我希望查询id,product_id,price三个字段,要求是按照product_id进行分组,查询price最高的记录。
我尝试的语句:
1.SELECT id,product_id,max(price) FROM goods GROUP BY product_id;
得到的结果是:
product_id和price虽然是正确的,但是明显对应的id不是正确的。
2.select id,product_id,price FROM (SELECT * FROM goods ORDER BY price DESC) as goods GROUP BY product_id;
得到的结果是:
根本就没有按照price最大的进行筛选
这个题目前阵子刚看过,几乎一模一样,当时觉得如果查询单表的数据都要 join 的话不是一个优雅的事情,但最后也没有找到除 join 外的任何方案。
网传,切换到 PG 就有这个功能。。。
这里有一个知识点
group
只能找出对应最高数据,并不能找到同行数据GPT给出的答案:适用于MySQL 8.0以上
先排序后分组,放在一个SQL中则需要先子查询排序的结果,然后根据子查询结果分组,这里面的注意点是因为mysql版本SQL标准不同,SQL查询也不同,主要就是mysql5.6及以上版本的差别: