복붙노트

[SQL] SQL 그룹으로 각 그룹 상위 N 항목

SQL

SQL 그룹으로 각 그룹 상위 N 항목

나는 유도 할 수있는 SQL 쿼리가 주어진 매장에서 상위 5 개 판매 아이템을 얻을 수 있습니다.

SELECT TOP 5 S.UPCCode, SUM(TotalDollarSales) FROM Sales S
WHERE S.StoreId = 1
GROUP BY S.UPCCode
ORDER BY SUM(S.TotalDollarSales) desc

판매 테이블이있다 -> UPCCode, SaleDate, STOREID, TotalDollarSales

나는 나에게 하나의 쿼리에서 각 상점에 판매 5 개 항목을 맨 반환하는 질의를 찾고 있어요. 여러 개의 쿼리를 작성하고 노동 조합을 사용하지만 효율적으로하지 않는 것 같습니다 수 있습니다.

어떻게 하나의 쿼리에서 각 상점 상위 5 개 판매 아이템을 얻을 수 있습니다.

미리 감사드립니다.

해결법

  1. ==============================

    1.

    ;WITH s AS 
    (
      SELECT StoreID, UPCCode, tds, rn = ROW_NUMBER()
      OVER (PARTITION BY StoreID ORDER BY tds DESC)
      FROM 
      (
        SELECT StoreID, UPCCode, tds = SUM(TotalDollarSales)
        FROM Sales
        GROUP BY StoreID, UPCCode
      ) AS s2
    )
    SELECT StoreID, UPCCode, TotalDollarSales = tds
    FROM s
    WHERE rn <= 5
    ORDER BY StoreID, TotalDollarSales DESC;
    
  2. ==============================

    2.이 시도:

    이 시도:

    select ss.StoreId,is.*
    from (select distinct StoreId from Sales) ss
    cross apply (SELECT TOP 5 S.UPCCode, SUM(TotalDollarSales) as SumTotalDollarSales FROM Sales S
                 WHERE S.StoreId = ss.StoreId
                 GROUP BY S.UPCCode
                 ORDER BY SUM(S.TotalDollarSales) desc) is
    
  3. from https://stackoverflow.com/questions/15228273/sql-group-by-top-n-items-for-each-group by cc-by-sa and MIT license