根据另一列的总和选择列

时间:2010-11-05 20:08:15

标签: sql tsql

假设我有

SalesManagerId, SaleAmount, ProductId

我想总结每个SaleAmount SalesManagerIdProductId)并抓住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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

至少假设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

答案 2 :(得分:0)

使用GROUP BY和ORDER:

SELECT SalesManagerId, SUM(SaleAmount) AS SaleSum, ProductId FROM [table-name] GROUP BY SalesManagerId, ProductId ORDER BY SaleSum DESC

答案 3 :(得分:-2)

非常好的问题!

试试这个:

SELECT MAX(SUM(SaleAmount)), ProductId GROUP BY SalesManagerId, ProductId;

或者

SELECT SUM(SaleAmount) as Sum, ProductId GROUP BY SalesManagerId, ProductId ORDER BY Sum DESC;

您不能只删除总和列,只能获取产品ID