基于另一列的总和选择列
比方说,我有基于另一列的总和选择列
SalesManagerId, SaleAmount, ProductId
我想总结SaleAmount
每个(SalesManagerId
,ProductId
)并获取ProductId
与最大sum(SaleAmount)
。
这是可能的一个查询?
例子:
1, 100, 1
1, 200, 1
1, 600, 1
1, 400, 2
2, 100, 3
3, 100, 4
3, 100, 4
2, 500, 6
3, 100, 5
结果:
1, 900, 1
2, 500, 6
3, 200, 4
如果您有可用的分析功能,您可以使用RANK()
喜欢的东西:
SELECT SalesManagerId, ProductId, Total
FROM (
SELECT SalesManagerId,
ProductId,
SUM(SaleAmount) as Total,
RANK() OVER(PARTITION BY SalesManagerId
ORDER BY SUM(SaleAmount) DESC) as R
FROM <Table name>
GROUP BY SalesManagerId, ProductId) as InnerQuery
WHERE InnerQuery.R = 1
哇。这是热的! – Monogonator 2010-11-05 20:34:37
+1比我做的更好。一个注意:你错过了你的内部SELECT的FROM部分。 – 2010-11-05 20:53:48
谢谢乔。我已经添加了FROM占位符。 – Axn 2010-11-06 00:52:13
非常好的问题!
试试这个:
SELECT MAX(SUM(SaleAmount)), ProductId GROUP BY SalesManagerId, ProductId;
或可替代
SELECT SUM(SaleAmount) as Sum, ProductId GROUP BY SalesManagerId, ProductId ORDER BY Sum DESC;
你不能刚落之列,得到的只是产品ID
使用GROUP BY和ORDER:
SELECT SalesManagerId, SUM(SaleAmount) AS SaleSum, ProductId FROM [table-name] GROUP BY SalesManagerId, ProductId ORDER BY SaleSum DESC
这不起作用;它会为同一个'SalesManagerId'返回多行。我只想要最大的'SaleSum'。 – Monogonator 2010-11-05 20:15:38
对不起,我justed做了一个编辑,在查询的末尾添加“LIMIT 1”来返回最上面一行。 – 2010-11-05 20:16:55
'LIMIT 1'在T-SQL中无效。 (我应该提前指定T-SQL。) – Monogonator 2010-11-05 20:19:41
假设至少是SQL 2005,所以你可以使用一个CTE:
;with cteTotalSales as (
select SalesManagerId, ProductId, SUM(SaleAmount) as TotalSales
from YourSalesTable
group by SalesManagerId, ProductId
),
cteMaxSales as (
select SalesManagerId, MAX(TotalSales) as MaxSale
from cteTotalSales
group by SalesManagerId
)
select ts.SalesManagerId, ms.MaxSale, ts.ProductId
from cteMaxSales ms
inner join cteTotalSales ts
on ms.SalesManagerId = ts.SalesManagerId
and ms.MaxSale = ts.TotalSales
order by ts.SalesManagerId
这里比解决方案有什么优点:http:// stackoverflow。com/questions/4109622/select-column-based-on-sum-of-another-column/4109768#4109768 – Monogonator 2010-11-05 20:50:38
Axn的解决方案优于我在这里制作的,因为它可以完成任务,表。 – 2010-11-05 20:53:31
仍然有帮助,因为我学到了新的东西!谢谢! – Monogonator 2010-11-06 03:17:12
好了,回来后,和 - 在我的帖子中,我终于明白你在问什么。您说过要“为每个销售总额(SalesManagerId,ProductId)总结SaleAmount并以最大总和(SaleAmount)获取ProductId” - 现在请将“每个SalesManagerId”添加到该子句的开头。目前尚不清楚你是否每个经理都只需要一行*。 – 2010-11-05 20:29:35