"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 분석 기능 없이 MySQL에서 범주별 상위 행을 효율적으로 선택하는 방법은 무엇입니까?

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

2024-11-08에 게시됨
검색:750

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

MySQL에서 범주별 상위 행 선택

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

분석 함수 에뮬레이션

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

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 

설명

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

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

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3