> 데이터 베이스 > MySQL 튜토리얼 > 분석 기능 없이 MySQL의 각 범주에서 상위 3개 행을 가져오는 방법은 무엇입니까?

분석 기능 없이 MySQL의 각 범주에서 상위 3개 행을 가져오는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-30 10:34:27
원래의
889명이 탐색했습니다.

How to Get the Top 3 Rows From Each Category in MySQL Without Analytic Functions?

MySql의 각 카테고리에서 상위 3개 행 선택

수많은 레코드와 카테고리 열이 있는 테이블에서 검색하는 작업이 발생합니다. 각 카테고리의 상위 2개 기사만 표시됩니다. 이를 달성하기 위해 사용자는 처음에 검색된 행 수를 범주당 2개로 제한하여 보기 제한 행을 만들려고 시도합니다. 그러나 이 접근 방식은 충분하지 않습니다.

분석 기능 이해

원하는 결과를 얻으려면 분석/윈도우잉/순위 지정 기능을 사용해야 합니다. 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
로그인 후 복사

@rownum 및 @category 변수는 각각 행 번호와 현재 카테고리를 추적하는 데 사용됩니다. 이러한 변수를 사용하여 해당 카테고리 내 각 행의 순위가 결정되고 상위 3개 순위 내의 항목이 선택됩니다.

결과 세트 사용자 정의

원하는 열만 반환되는 경우 아래 설명과 같이 SELECT 문에 필요한 열을 지정합니다.

SELECT x.articleid, x.title
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
로그인 후 복사

위 내용은 분석 기능 없이 MySQL의 각 범주에서 상위 3개 행을 가져오는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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