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 중국어 웹사이트의 기타 관련 기사를 참조하세요!