집 >데이터 베이스 >MySQL 튜토리얼 >SQL Server 2005에서 여러 범주에 대한 상위 10개 레코드를 검색하는 방법은 무엇입니까?
SQL Server 2005: 여러 범주에 걸쳐 상위 10개 레코드 검색
이 가이드에서는 SQL Server 2005를 사용하여 단일 SQL 쿼리 내에서 각 범주(섹션)에 대한 상위 10개 레코드를 효율적으로 검색하는 방법을 보여줍니다. 테이블에 레코드를 "Business", " 지역' 및 '특집'을 선택해야 하며 특정 날짜의 각 섹션에 대한 최신 항목 10개가 필요합니다.
쿼리 솔루션:
다음 SQL 쿼리는 RANK()
창 함수를 사용하여 이를 수행합니다.
<code class="language-sql">SELECT rs.Field1, rs.Field2 FROM ( SELECT Field1, Field2, RANK() OVER (PARTITION BY Section ORDER BY RankCriteria DESC) AS Rank FROM table ) AS rs WHERE Rank <= 10</code>
설명:
SELECT rs.Field1, rs.Field2
원하는 열을 선택합니다.SELECT Field1, Field2, RANK() ...
순위를 수행합니다.PARTITION BY Section
: 데이터를 별도의 섹션('비즈니스', '로컬', '기능' 등)으로 나눕니다. 순위는 각 섹션마다 독립적입니다.ORDER BY RankCriteria DESC
: 순위 기준(예: 날짜, ID)에 따라 각 섹션 내의 레코드를 정렬합니다. DESC
최신 기록이 가장 높은 순위를 차지하도록 보장합니다.RANK()
: 해당 섹션 내의 각 레코드에 순위를 할당합니다. 동일한 RankCriteria
값을 갖는 레코드는 동일한 순위를 받게 됩니다.WHERE Rank <= 10
각 섹션의 상위 10개 레코드(순위 기준)만 포함하도록 결과를 필터링합니다.중요 고려 사항:
RankCriteria
값을 공유하는 경우 동일한 순위를 받게 됩니다. 상위 10개 순위에 동점이 있는 경우 섹션에 대해 10개 이상의 레코드가 반환될 수 있습니다.ROW_NUMBER()
대신 RANK()
을 사용하는 것이 좋습니다. ROW_NUMBER()
은 고유한 일련 번호를 할당하여 섹션당 10개의 레코드를 보장합니다. 다만, 동률 기록이 10개 이상인 경우 동점 기록을 임의로 선택할 수도 있습니다.이 접근 방식은 SQL Server 2005의 여러 범주에 걸쳐 상위 N개 레코드를 검색하는 간결하고 효율적인 방법을 제공합니다. "table"
, "Field1"
, "Field2"
및 "RankCriteria"
를 실제 테이블 및 열 이름으로 바꿔야 합니다. .
위 내용은 SQL Server 2005에서 여러 범주에 대한 상위 10개 레코드를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!