sql >> Database >  >> RDS >> Sqlserver

Hoe GROUP BY en ROW_NUMBER combineren?

Wow, de andere antwoorden zien er ingewikkeld uit - dus ik hoop dat ik niet iets voor de hand liggends heb gemist.

U kunt OVER . gebruiken /PARTITION BY tegen aggregaten, en ze zullen dan groeperen/aggregeren zonder een GROUP BY clausule. Dus ik heb zojuist uw zoekopdracht gewijzigd in:

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

Dat geeft de gevraagde resultatenset.



  1. Externe verbindingen Mysql Ubuntu - bindadres mislukt

  2. Hoe vind ik het op één na hoogste salaris van de werknemerstabel?

  3. Hoe deze query's te combineren om snellere prestaties te bereiken?

  4. Hoe alle records tellen, maar alleen een specifiek nummer ophalen (LIMIT) voor weergave?