SQL中分组的最大值

23 浏览
0 Comments

SQL中分组的最大值

这个问题已经有答案了

SQL select only rows with max value on a column [duplicate]

我在 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日
0
0 Comments

每个商店的最大数量限制不会存在同一商店的更高限制。

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;

在此处进行测试这里

0
0 Comments

你想要进行筛选。这里有一种简单的方法,使用相关子查询:

select s.*
from s
where s.sales = (select max(s2.sales)
                 from sales s2
                 where s2.storeId = s.storeId
                );

如果您的数据规模较大,则需要在sales(storeId,sales)上创建索引。

0