>데이터 베이스 >MySQL 튜토리얼 >특정 열로 그룹화된 MySQL 테이블에서 상위 N개 최대값을 어떻게 검색합니까?

특정 열로 그룹화된 MySQL 테이블에서 상위 N개 최대값을 어떻게 검색합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-10 05:33:02238검색

How do you retrieve the top N maximum values from a MySQL table, grouped by a specific column?

MySQL 테이블에서 상위 N개의 최대값 검색

데이터 분석의 일반적인 작업에는 특정 열에 대한 상위 n개의 최대값을 선택하는 작업이 포함됩니다. 테이블에서. 다음 표를 고려하십시오.

column1 column2
1 foo
2 foo
3 foo
4 foo
5 bar
6 bar
7 bar
8 bar

문제 설명:

주어진 n 값에 대해, column2별로 그룹화된, column1의 상위 n개 최대값을 검색합니다. 위의 예에서 n=2인 경우 원하는 출력은 다음과 같습니다.

column1
3
4
7
8

해결책:

간단한 접근 방식에서는 행을 열2로 그룹화하는 것이 포함될 수 있습니다. 각 그룹의 최대값을 선택하면 각 그룹의 절대 최대값만 반환됩니다. 상위 n개 값을 검색하려면 보다 고급 접근 방식이 필요합니다.

UNION 기반 접근 방식:

한 가지 접근 방식은 UNION 절을 사용하여 각 쿼리가 수행하는 여러 쿼리를 결합하는 것입니다. 다른 그룹의 최대값을 선택합니다. n=2인 경우 다음 쿼리로 충분합니다.

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)

순위 기반 접근 방식:

더 유연한 n 값의 경우 순위 기반 접근 방식을 사용할 수 있습니다. 고용. 여기에는 column1의 값을 기준으로 각 행에 순위를 할당한 다음 상위 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

'grouper'를 그룹 기준 열의 이름으로 바꾸고 'val'을 값이 포함된 열로 바꿉니다.

LIMIT 절은 각 그룹의 n번째 순위 값을 정의합니다. 그런 다음 이 n번째 순위 값보다 큰 값을 가진 행이 선택됩니다.

결론:

두 접근 방식 모두 테이블에서 상위 n개 최대값을 선택하는 효과적인 방법을 제공합니다. 그 자체의 강점과 한계가 있습니다. 통합 기반 접근 방식은 간단하고 강력한 반면, 순위 기반 접근 방식은 검색할 최대값 수를 지정하는 유연성을 제공합니다.

위 내용은 특정 열로 그룹화된 MySQL 테이블에서 상위 N개 최대값을 어떻게 검색합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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