> 데이터 베이스 > MySQL 튜토리얼 > 분석 함수를 사용하지 않고 MySQL 테이블의 각 범주에서 상위 3개 행을 선택하는 방법은 무엇입니까?

분석 함수를 사용하지 않고 MySQL 테이블의 각 범주에서 상위 3개 행을 선택하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-10-29 14:58:02
원래의
470명이 탐색했습니다.

How to Select the Top 3 Rows from Each Category in a MySQL Table Without Using Analytic Functions?

MySQL 쿼리: 테이블의 각 범주에서 상위 3개 행 선택

이 시나리오에는 수많은 레코드가 포함된 테이블이 있습니다. 카테고리별로 분류되어 있습니다. 목표는 각 카테고리에서 상위 3개 기사만 검색하는 것입니다. 뷰와 LIMIT를 사용하여 솔루션을 시도했지만 레코드 수가 제한되었습니다.

이 문제를 해결하려면 MySQL에 없는 분석 기능을 활용해야 합니다. 그러나 변수를 사용하면 비슷한 효과를 얻을 수 있습니다.

<code class="sql">SELECT x.*
FROM (
    SELECT t.*,
        CASE 
            WHEN @category != t.category THEN @rownum := 1 
            ELSE @rownum := @rownum + 1 
        END AS rank,
        @category := t.category AS var_category
    FROM TBL_ARTIKUJT t
    JOIN (SELECT @rownum := NULL, @category := '') r
    ORDER BY t.category
) x
WHERE x.rank <= 3</code>
로그인 후 복사

이 쿼리는 @rownum 및 @category 변수를 사용하여 범주 내의 행 순위를 추적합니다. 두 변수를 모두 NULL/빈 값으로 설정하는 것부터 시작합니다.

테이블의 각 행(별칭 "t")에 대해 현재 범주가 이전 범주와 다른지 확인합니다. 그렇다면 @rownum에 1을 할당합니다. 그렇지 않으면 @rownum을 1씩 증가시킵니다. 동시에 현재 범주를 @category에 할당하여 후속 행의 비교를 위한 컨텍스트를 유지합니다.

결과는 해당 범주 내에서 각 행의 순위를 지정하는 임시 테이블입니다. 그런 다음 마지막 WHERE 절은 이 임시 테이블을 필터링하여 순위가 3 이하인 행만 표시합니다.

원하는 열과 일치하도록 외부 SELECT 절(x.*)의 열 참조를 조정해야 합니다. 검색하세요.

위 내용은 분석 함수를 사용하지 않고 MySQL 테이블의 각 범주에서 상위 3개 행을 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿