>데이터 베이스 >MySQL 튜토리얼 >MySQL의 각 카테고리에서 상위 2개 기사를 선택하는 방법은 무엇입니까?

MySQL의 각 카테고리에서 상위 2개 기사를 선택하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-29 12:02:02669검색

How to Select the Top Two Articles from Each Category in MySQL?

MySQL 쿼리: 각 카테고리에서 상위 2개 기사 선택

MySQL에서는 테이블에서 지정된 수의 행을 추출하는 경우가 많습니다. LIMIT 절을 사용합니다. 그러나 그룹화를 기반으로 여러 행을 선택해야 하는 경우에는 다른 접근 방식이 필요합니다. 이 문서에서는 테이블의 각 범주에서 두 개의 행을 선택하는 특정 시나리오를 다룹니다.

원래 사용자는 행을 제한하는 뷰를 만든 다음 하위 쿼리를 사용하여 원하는 항목을 검색하여 이를 달성하려고 했습니다. 기록. 그러나 이 접근 방식으로 인해 총 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;

수정된 쿼리에서:

  • 외부 쿼리 TBL_ARTIKUJT(x.*) 테이블에서 열을 선택합니다.
  • 괄호로 묶인 내부 쿼리는 각 범주 내 각 행의 순위를 계산합니다. 또한 현재 행 번호와 범주를 추적하는 데 사용되는 두 개의 사용자 정의 변수 @rownum 및 @category를 정의합니다.
  • WHERE 절은 순위가 3 이하인 행만 포함하도록 결과를 필터링합니다. .

이 접근 방식은 창 기능을 효과적으로 에뮬레이트하여 각 범주에서 원하는 행을 그룹화하고 선택합니다. 원래 열만 검색하려는 경우 외부 쿼리를 수정하여 x.* 대신 특정 열 이름을 지정할 수 있습니다.

위 내용은 MySQL의 각 카테고리에서 상위 2개 기사를 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.