选择多个最大值

Oha*_*has 7 mysql select group-by max

我有一个名为表order包含列id,user_id,priceitem_id.商品价格不固定,我想选择每件商品最贵的订单.我想选择user_id,item_idprice在同一个查询中.我尝试了以下查询,但它没有返回正确的结果集.

SELECT user_id, item_id, MAX(price)
FROM order
GROUP BY item_id
Run Code Online (Sandbox Code Playgroud)

此查询返回的某些行有错误user_id.但是,结果集中的所有行都显示每个项目的正确最高价格.

Dan*_*llo 9

您可能希望使用派生表,如下所示:

SELECT    o1.item_id, o1.max_price, o2.user_id user_of_max_price
FROM      (
             SELECT item_id, MAX(price) max_price
             FROM `order`
             GROUP BY item_id
          ) o1
JOIN      `order` o2 ON (o2.price = o1.max_price AND o2.item_id = o1.item_id)
GROUP BY  o1.item_id;
Run Code Online (Sandbox Code Playgroud)

测试用例:

CREATE TABLE `order` (user_id int, item_id int, price decimal(5,2));

INSERT INTO `order` VALUES (1, 1, 10);
INSERT INTO `order` VALUES (1, 2, 15);
INSERT INTO `order` VALUES (1, 3, 8);
INSERT INTO `order` VALUES (2, 1, 20);
INSERT INTO `order` VALUES (2, 2, 6);
INSERT INTO `order` VALUES (2, 3, 15);
INSERT INTO `order` VALUES (3, 1, 18);
INSERT INTO `order` VALUES (3, 2, 13);
INSERT INTO `order` VALUES (3, 3, 10);
Run Code Online (Sandbox Code Playgroud)

结果:

+---------+-----------+-------------------+
| item_id | max_price | user_of_max_price |
+---------+-----------+-------------------+
|       1 |     20.00 |                 2 |
|       2 |     15.00 |                 1 |
|       3 |     15.00 |                 2 |
+---------+-----------+-------------------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)