>데이터 베이스 >MySQL 튜토리얼 >MySQL의 각 그룹에서 최대값을 가진 행을 선택하는 방법은 무엇입니까?

MySQL의 각 그룹에서 최대값을 가진 행을 선택하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-05 01:44:08840검색

How to Select the Row with the Maximum Value from Each Group in MySQL?

MySQL의 최대값을 기준으로 행 그룹화 및 검색

데이터베이스 관리에서 그룹의 특정 행을 검색하는 것은 데이터 분석에 매우 중요할 수 있습니다. 그리고 보고합니다. MySQL에서는 그룹화 및 정렬 작업이 이와 관련하여 중요한 역할을 합니다. 그러나 작업별로 그룹을 적용한 후 그룹에서 가장 높은 값을 가진 행을 선택하려고 할 때 일반적인 문제가 발생합니다.

여러 버전의 데이터를 나타내는 행이 있는 테이블이 있는 시나리오를 생각해 보세요. id 및 version_id 열로. 목표는 각 고유 ID에 대해 가장 높은 version_id가 있는 행을 검색하는 것입니다.

order by 절과 함께 group by를 사용하는 직관적인 접근 방식은 원하는 결과를 제공하지 못하지만 MySQL은 이 쿼리에 대해 몇 가지 효율적인 솔루션을 제공합니다. :

Max 기반 그룹화:

SELECT *
FROM (SELECT id, MAX(version_id) AS max_version_id FROM table GROUP BY id) AS subquery
JOIN table ON subquery.id = table.id AND subquery.max_version_id = table.version_id;

이 쿼리는 각 ID 그룹의 최대 version_id를 계산하는 하위 쿼리입니다. 그런 다음 기본 쿼리는 내부 조인을 수행하여 원본 테이블에서 해당 행을 검색합니다.

상관 하위 쿼리:

SELECT t1.*
FROM table AS t1
WHERE t1.version_id = (SELECT MAX(version_id) FROM table WHERE id = t1.id);

이 접근 방식은 상관 하위 쿼리를 사용하여 비교합니다. 각 행의 version_id를 해당 ID 그룹 내 최대값으로 지정합니다. 기본 쿼리는 조건을 만족하는 행만 선택합니다.

창 함수:

SELECT id, MAX(version_id) OVER (PARTITION BY id) AS max_version_id, field1, field2
FROM table
ORDER BY id;

창 함수는 각 ID 내의 최대 version_id를 계산하여 대체 접근 방식을 제공합니다. 분할. OVER 절은 분할 기준을 지정하고 ORDER BY 절은 행이 각 파티션 내에서 정렬되도록 보장합니다.

이러한 솔루션은 각 고유 ID에 대해 version_id가 가장 높은 행을 검색하는 효율적인 방법을 제공합니다. 데이터베이스 사용자는 그룹화 및 정렬 작업의 미묘한 차이를 이해함으로써 쿼리를 구체화하여 복잡한 데이터 구조에서 의미 있는 데이터를 추출할 수 있습니다.

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

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