簡體   English   中英

根據另一列的總和選擇列

[英]Select column based on sum of another column

讓我說我有

SalesManagerId, SaleAmount, ProductId

我想總結每個SaleAmountSalesManagerIdProductId )並使用最大sum(SaleAmount)獲取ProductId

這可能在一個查詢中?

例:

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

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

使用GROUP BY和ORDER:

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

非常好的問題!

試試這個:

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

或者

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

您不能只刪除sum列並僅獲取產品ID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM