>  기사  >  데이터 베이스  >  MySQL 테이블에서 상위 N개의 최대값을 선택하는 방법은 무엇입니까?

MySQL 테이블에서 상위 N개의 최대값을 선택하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-10 01:20:02785검색

How to Select the Top N Maximum Values from a MySQL Table?

MySQL 테이블에서 상위 n개 최대값 선택

SQL 데이터베이스를 처리할 때 테이블에서 상위 n개 최대값을 검색해야 하는 경우가 많습니다. 이는 가장 자주 발생하는 카테고리 또는 최고 성능의 제품을 찾는 데 특히 유용할 수 있습니다.

MySQL에서 테이블에서 최대값을 선택하는 기본 접근 방식은 열을 그룹화하고 각 항목 내에서 가장 높은 값을 식별하는 것입니다. 그룹. 그러나 상위 n개 최대값을 선택하려면 다른 접근 방식이 필요합니다.

테이블에서 상위 n개 최대값을 선택하는 한 가지 방법은 두 개의 UNION 쿼리를 결합하는 것입니다. 첫 번째 쿼리는 각 그룹의 최대값을 식별하고, 두 번째 쿼리는 처음에 식별된 최대값을 제외하고 각 그룹의 다음으로 높은 값을 선택합니다.

SELECT max(column1) m
FROM table t
GROUP BY column2
UNION
SELECT max(column1) m
FROM table t
WHERE column1 NOT IN (SELECT max(column1)
                      WHERE column2 = t.column2)

이 접근 방식은 원하는 수만큼 검색하도록 사용자 정의할 수 있습니다. 두 번째 쿼리에서 LIMIT 절을 조정하여 최고 최대 값을 찾습니다. 예를 들어 상위 2개의 최대값을 선택하려면 LIMIT 절은 "LIMIT 2,1"이 됩니다.

MySQL 테이블에서 상위 n개의 최대값을 선택하는 또 다른 방법은 파티션에 대한 순위를 시뮬레이션하는 것입니다. 이 기술에는 그룹 내의 각 값에 순위를 할당하는 복잡한 하위 쿼리가 포함됩니다. 그런 다음 결과를 필터링하여 상위 n개 값을 검색할 수 있습니다.

다음은 이 접근 방식을 사용하는 쿼리의 예입니다.

SELECT t.*
FROM
   (SELECT grouper,
          (SELECT val
           FROM table li
           WHERE li.grouper = dlo.grouper
           ORDER BY
                 li.grouper, li.val DESC
           LIMIT 2,1) AS mid
   FROM
      (
      SELECT DISTINCT grouper
      FROM table
      ) dlo
   ) lo, table t
WHERE t.grouper = lo.grouper
      AND t.val > lo.mid

이 기술은 약간 더 복잡하지만 사용할 수 있습니다. 테이블의 모든 열에 대해 상위 n개 최대값을 선택합니다.

이러한 접근 방식 중 하나를 구현할 때는 데이터 분포와 필요한 상위 최대값 수를 고려하는 것이 중요합니다. 다수의 최고 최대값을 선택하면 대규모 데이터 세트의 성능에 큰 영향을 미칠 수 있습니다.

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

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