Нужна помощь с GROUP BY SQL - PullRequest
       4

Нужна помощь с GROUP BY SQL

1 голос
/ 26 сентября 2011

У меня есть таблица «Доход», в которой хранится доход для комбинации состояния компании.

Company int
State   char(2)
IsBiggestState bit
TotalRevenue numeric (10,2)

Мне нужно установить бит IsBiggestState в 1, если сумма TotalRevenue является наибольшим количеством всех состояний внутри компании.

Можете ли вы помочь мне написать SQL? Поскольку я имею дело с миллионами записей, важна эффективность.

Мы находимся на SQL2008 R2.

Ответы [ 2 ]

2 голосов
/ 26 сентября 2011
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
1 голос
/ 26 сентября 2011

Это решило бы проблему двух государств, имеющих один и тот же 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...