집 >데이터 베이스 >MySQL 튜토리얼 >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 중국어 웹사이트의 기타 관련 기사를 참조하세요!