SQL中分组的最大值
SQL中分组的最大值
这个问题已经有答案了:
我在 SQL 中遇到了一个问题,我相信它一定很简单,但我无法弄清楚。我想要每个分组中的 MAX() 值,但我也想要在同一行中的另一个列的值。这是一个表定义的示例:
mysql> desc Sales; +---------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+---------+------+-----+---------+-------+ | StoreID | int(11) | YES | | NULL | | | Day | int(11) | YES | | NULL | | | Amount | int(11) | YES | | NULL | | +---------+---------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
下面是一些数据:
mysql> SELECT * FROM Sales; +---------+------+--------+ | StoreID | Day | Amount | +---------+------+--------+ | 1 | 1 | 44 | | 1 | 2 | 31 | | 1 | 3 | 91 | | 2 | 1 | 93 | | 2 | 2 | 32 | | 2 | 3 | 41 | | 3 | 1 | 48 | | 3 | 2 | 95 | | 3 | 3 | 12 | +---------+------+--------+ 9 rows in set (0.00 sec)
我想知道每个商店的销售额 (Amount
) 最高的 Day
是哪一天。
我知道我可以这样做:
SELECT StoreID, MAX(Amount) FROM Sales GROUP BY StoreID; +---------+-------------+ | StoreID | MAX(Amount) | +---------+-------------+ | 1 | 91 | | 2 | 93 | | 3 | 95 | +---------+-------------+ 3 rows in set (0.00 sec)
这告诉我每个商店的最高销售额,但我真正想知道的是发生这种情况的日期。但是我无法将 Day 添加回查询中,因为它不在 GROUP BY 中,我也不认为我真的想将其分组,是吗?
我不确定该怎么办。
简而言之,我想要的结果应该是这样的:
+---------+------+--------+ | 1 | 3 | 91 | | 2 | 1 | 93 | | 3 | 2 | 95 | +---------+------+--------+
admin 更改状态以发布 2023年5月22日
每个商店的最大数量限制不会存在同一商店的更高限制。
SELECT * FROM Sales s WHERE NOT EXISTS ( SELECT 1 FROM Sales s2 WHERE s2.StoreID = s.StoreID AND s2.Amount > s.Amount ) ORDER BY Amount ASC, StoreID ASC;
在此处进行测试这里