我有一个“收入”表,用于存储公司州组合的收入。需要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