【发布时间】:2020-03-31 22:41:57
【问题描述】:
我正在努力用 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)
我想知道的是,Day 对于每个 StoreID 的销售额 (Amount) 最多。
现在我知道我可以做到:
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 |
+---------+------+--------+
【问题讨论】:
-
有哪些超过 1 天的最大值?
-
对于greatest-n-per-group 标签,Stack Overflow 上还有很多其他答案。
标签: mysql sql greatest-n-per-group