sql >> Databáze >  >> RDS >> Sqlserver

Jak zkombinovat GROUP BY a ROW_NUMBER?

Páni, ostatní odpovědi vypadají složitě - takže doufám, že jsem nepřehlédl něco zřejmého.

Můžete použít OVER /PARTITION BY proti agregátům a poté provedou seskupení/agregaci bez GROUP BY doložka. Takže jsem váš dotaz právě upravil na:

select T2.ID AS T2ID
    ,T2.Name as T2Name
    ,T2.Orders
    ,T1.ID AS T1ID
    ,T1.Name As T1Name
    ,T1Sum.Price
FROM @t2 T2
INNER JOIN (
    SELECT Rel.t2ID
        ,Rel.t1ID
 --       ,MAX(Rel.t1ID)AS t1ID 
-- the MAX returns an arbitrary ID, what i need is: 
      ,ROW_NUMBER()OVER(Partition By Rel.t2ID Order By Price DESC)As PriceList
        ,SUM(Price)OVER(PARTITION BY Rel.t2ID) AS Price
        FROM @t1 T1 
        INNER JOIN @relation Rel ON Rel.t1ID=T1.ID
--        GROUP BY Rel.t2ID
)AS T1Sum ON  T1Sum.t2ID = T2.ID
INNER JOIN @t1 T1 ON T1Sum.t1ID=T1.ID
where t1Sum.PriceList = 1

Což dává požadovanou sadu výsledků.



  1. Jaký je ekvivalent PostgreSQL pro ISNULL()

  2. node-postgres s velkým množstvím dotazů

  3. MySQL v AWS EC2 – Jak se škáluje?

  4. sql (oracle) pro výběr prvních 10 záznamů, poté dalších 10 atd