我有一個「收入」表,用於存儲公司州組合的收入。需要GROUP BY SQL的幫助
Company int
State char(2)
IsBiggestState bit
TotalRevenue numeric (10,2)
如果TotalRevenue數量是公司內所有州的最大數量,我需要將IsBiggestState位設置爲1。
你能幫我寫SQL嗎?由於我正在處理數百萬條記錄,因此效率值得關注。
我們在SQL2008 R2上。
我有一個「收入」表,用於存儲公司州組合的收入。需要GROUP BY SQL的幫助
Company int
State char(2)
IsBiggestState bit
TotalRevenue numeric (10,2)
如果TotalRevenue數量是公司內所有州的最大數量,我需要將IsBiggestState位設置爲1。
你能幫我寫SQL嗎?由於我正在處理數百萬條記錄,因此效率值得關注。
我們在SQL2008 R2上。
UPDATE A
SET A.IsBiggestState = 1
FROM YourTable A
INNER JOIN (SELECT Company, MAX(TotalRevenue) MaxRevenue FROM YourTable
GROUP BY Company) B
ON A.Company = B.Company AND A.TotalRevenue = B.MaxRevenue
這將解決2個州具有相同TotalRevenue(如果這確實是一個問題)的問題。它只會將其中的一個標記爲IsBiggestState。我不完全確定性能與其他解決方案相比如何。
UPDATE A
SET A.IsBiggestState = 1
FROM Revenue A
INNER JOIN
(
SELECT
Company
,[State]
,ROW_NUMBER() OVER (PARTITION BY Company ORDER BY TotalRevenue desc) as rownum
FROM Revenue
) B
ON A.Company = B.Company AND A.[State] = B.[State] AND B.rownum = 1
您使用的是什麼RDBMS和版本? – Lamak
如果兩個州的某個公司的收入相同,該怎麼辦? – RedFilter