> 데이터 베이스 > MySQL 튜토리얼 > 분석 기능 없이 MySQL에서 범주별 상위 행을 효율적으로 선택하는 방법은 무엇입니까?

분석 기능 없이 MySQL에서 범주별 상위 행을 효율적으로 선택하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-10-28 19:05:29
원래의
212명이 탐색했습니다.

How to Efficiently Select Top Rows per Category in MySQL Without Analytic Functions?

MySQL에서 범주별 상위 행 선택

테이블의 각 범주에서 제한된 수의 행을 검색하려면 분석 기능을 활용할 수 있습니다. . 그러나 MySQL은 이러한 기능을 직접 제공하지 않습니다. 그럼에도 불구하고 변수를 사용하여 이를 에뮬레이트하는 것은 가능합니다.

분석 함수 에뮬레이션

다음 MySQL 쿼리는 분석 함수의 기능을 에뮬레이트하여 각 범주에 대해 상위 3개 행을 선택합니다. :

<code class="mysql">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>
로그인 후 복사

설명

  • 하위 쿼리는 TBL_ARTIKUJT 테이블에서 모든 행을 선택하고 두 개의 세션 변수 @rownum 및 @category를 초기화하여 현재 순위 및 카테고리.
  • 각 행에 지정된 순위는 해당 카테고리 내 위치를 나타냅니다. 새 범주가 발견되면 순위가 1로 재설정됩니다.
  • var_category는 각 행의 범주를 저장하는 데 사용됩니다.
  • 외부 SELECT 문은 하위 쿼리를 필터링하여 순위가 있는 행만 선택합니다. 3.

이 방법을 사용하면 MySQL에서 지원하지 않는 분석 기능에 의존하지 않고 원하는 기능을 구현할 수 있습니다.

위 내용은 분석 기능 없이 MySQL에서 범주별 상위 행을 효율적으로 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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