sql - 查询以显示每个卖家的最大销售额
问题描述
我有一张这样的表(示例):
Name_Seller Month Value
---------------------------
Seller A Jan 200
Seller B Jan 100
Seller A Fev 300
Seller B Fev 100
Seller C Jan 400
Seller A Mar 200
Seller D Jan 300
SQL查询:
SELECT Name_Seller, Month, Value
FROM SALES
WHERE Value = (SELECT MAX(Value) FROM SALES GROUP BY Name_Seller);
我想为每个卖家打印他的最大销售量以及销售时间。
你能帮我解决我的查询并解释为什么它不起作用吗?
我试过:
select name_seller, month, max(value)
from sales
group by name_seller, month;
但此查询返回:
+---------------+------------+------+
| NAME_SELLER | MAX(VALUE) | MONTH|
+---------------+------------+------+
| SELLER A | 4182.00 | Jan |
| SELLER A | 3261.00 | Fev |
| SELLER A | 4219.00 | Mar |
| SELLER B | 2123.00 | Jan |
| SELLER B | 2111.00 | Fev |
| SELLER B | 3918.00 | Mar |
| SELLER C | 3000.00 | Jan |
| SELLER C | 4000.00 | Fev |
| SELLER C | 1500.00 | Mar |
| SELLER D | 2819.00 | Jan |
| SELLER D | 3881.00 | Fev |
| SELLER D | 2012.00 | Mar |
+---------------+------------+------+
我想要每个推销员的最高销售额以及什么时候。
所以它应该只为每个销售员返回一份销售。
解决方案
带ROW_NUMBER()
窗口功能:
SELECT t.Name_Seller, t.Month, t.Value
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Name_Seller ORDER BY Value DESC) rn
FROM SALES
) t
WHERE t.rn = 1
如果您想退回领带,请更改ROW_NUMBER()
为。RANK()
或者在WHERE
子句中使用相关子查询:
SELECT s.* FROM SALES s
WHERE s.Value = (SELECT MAX(VALUE) FROM SALES WHERE Name_Seller = s.Name_Seller)
或者,如果您的数据库支持它:
SELECT * FROM SALES
WHERE (Name_Seller, Value) IN (SELECT Name_Seller, MAX(VALUE) FROM SALES GROUP BY Name_Seller)
推荐阅读
- php - 在多个视图中重用表单
- asp.net-core - IdentityServer4 - 如何从另一个 ApiResource 调用一个 ApiResource
- visual-studio - 使用 selenium 进行功能测试 - Visual Studio 或 Eclipse
- regex - 使用 Apache Pig 搜索主题标签
- loops - 循环无法正常工作
- regex - 正则表达式从 ipconfig /all 中提取 DNS 服务器
- python - 特征提取器是否在 Tensorflow 对象检测 API 中进行过训练?
- android - 如何在 Android 上使用 MongoDB Morphia?
- raspberry-pi - 使用修改后的 config.txt 文件构建 IoT Core 映像的文件冲突错误
- javascript - 使 Web Modal 看起来像 mac finder