This question already has answers here:
SQL select only rows with max value on a column [duplicate]
(27个答案)
在10个月前关闭。
我正在努力在SQL中做一些我确定必须很简单的事情,但我无法弄清楚。我想要一个组的MAX()值,但我也想要与最大值在同一行中的另一列的值。这是表定义示例:
这是一些数据:
我想知道的是,每个
现在我知道我可以这样做:
这告诉我每个商店的最大数量,但是我真正想要的是它发生的那一天。但是我无法将Day添加回查询中,因为它不在group by中,而且我不认为我真的想按该值进行分组吗?
我不确定从这里要去哪里。
简而言之,我想要的结果应如下所示:
如果数据偏大,则需要在
(27个答案)
在10个月前关闭。
我正在努力在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
的Amount
销售额最高(StoreID
)。现在我知道我可以这样做:
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 |
+---------+------+--------+
最佳答案
您要过滤。这是使用相关子查询的一种简单方法:
select s.*
from s
where s.sales = (select max(s2.sales)
from sales s2
where s2.storeId = s.storeId
);
如果数据偏大,则需要在
sales(storeId, sales)
上建立索引。关于mysql - 组中的SQL Max值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59221590/
10-16 13:29