>데이터 베이스 >MySQL 튜토리얼 >SQL의 GROUP BY를 사용하여 각 그룹의 상위 N개 항목을 효율적으로 검색하는 방법은 무엇입니까?

SQL의 GROUP BY를 사용하여 각 그룹의 상위 N개 항목을 효율적으로 검색하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-23 12:06:17198검색

How to Efficiently Retrieve the Top N Items for Each Group Using SQL's GROUP BY?

SQL Group BY: 각 그룹의 상위 N개 항목 가져오기

SQL에서 데이터로 작업할 때 다음을 기반으로 레코드를 그룹화해야 하는 경우가 많습니다. 공통 기준을 적용하고 각 그룹 내에서 계산 또는 집계를 수행합니다. 여기서 GROUP BY 절이 사용됩니다. 이 기사에서는 GROUP BY와 ROW_NUMBER() 함수를 결합하여 단일 쿼리로 각 그룹의 상위 N개 항목을 효율적으로 검색하는 강력한 기술에 대해 설명합니다.

문제: 매장당 최고 판매 항목

UPCCode, SaleDate, StoreId 및 열이 포함된 Sales 테이블이 있는 시나리오를 생각해 보세요. 총달러판매. 작업은 각 매장에서 판매된 상위 5개 품목을 식별하는 것입니다.

쿼리:

UNION을 사용하여 여러 개별 쿼리로 이 문제에 접근할 수 있지만 그렇지 않을 수도 있습니다. 효율적이다. 대신 다음 쿼리는 하위 쿼리와 ROW_NUMBER() 함수를 활용합니다.

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;

설명:

  1. 중첩 하위 쿼리(s2)는 Sales StoreID 및 UPCCode별로 데이터를 분석하고 각각의 총 매출(tds)을 계산합니다.
  2. 주 하위 쿼리는 s2를 둘러싸며 ROW_NUMBER() 함수를 도입합니다. 이 함수는 각 파티션(StoreID) 내의 각 레코드에 순차 번호(rn)를 할당합니다.
  3. 최종 쿼리에서는 rn이 5보다 작거나 같은 행(예: 상위 5개 레코드)을 필터링합니다. 각 파티션에 대해) 자격을 갖춘 각 파티션에 대해 StoreID, UPCCode 및 TotalDollarSales를 추출합니다. item.

결론:

이 고급 SQL 쿼리를 사용하면 각 그룹의 상위 N개 항목을 효율적으로 수집하여 일반적인 데이터 처리 시나리오를 우아하게 처리하고 성능을 향상할 수 있습니다. 귀하의 쿼리 최적화 기술이 필요합니다.

위 내용은 SQL의 GROUP BY를 사용하여 각 그룹의 상위 N개 항목을 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.