组中的SQL Max值

我正在尽力在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 |
+---------+------+--------+
yellowmin 回答:组中的SQL Max值

您要过滤。这是使用相关子查询的一种简单方法:

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

如果数据偏大,则需要在sales(storeId,sales)上建立索引。

,

对于每个商店的最大数量,同一商店不会有更高的数量。

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;

测试here

,

通常,您可以将联接查询返回,以获取其余的行数据...

SELECT s.*
FROM Sales AS s
INNER JOIN (
   SELECT StoreID,MAX(Amount) AS MaxAmount
   FROM Sales 
   GROUP BY StoreID
) AS m ON s.StoreID = m.StoredID AND s.Amount = m.MaxAmount
;

如果同一StoreID有多个具有MaxAmount的Sales,则查询将返回所有Sales,而不仅仅是其中之一。

本文链接:https://www.f2er.com/2959551.html

大家都在问