이 글에서는 MySQL에서 특정 열의 최댓값을 가진 행을 찾는 방법을 자세히 알아보겠습니다.
참고: 이 글에서는 'DBNAME'이라는 데이터베이스와 'tableName'이라는 테이블이 이미 생성되어 있다고 가정합니다.
서브쿼리를 활용한 방법
특정 열의 최댓값을 가진 행을 조회하는 가장 대표적인 방법은 서브쿼리를 사용하는 것입니다. WHERE 절 안에서 해당 열의 최댓값을 먼저 구하고, 그 값과 일치하는 행을 반환하는 방식입니다.
아래 예시는 colName3 열의 최댓값을 가진 행을 조회하는 쿼리입니다.
쿼리
SELECT colName1, colName2, colName3
FROM tableName
WHERE colName3=(SELECT MAX(colName3) FROM tableName);
실행 결과
+--------------+--------------+--------------+
| colName1 | colName2 | colName3 |
+--------------+--------------+--------------+
| 0003 | D | 20.05 |
+--------------+--------------+--------------+
다른 해결 방법
서브쿼리 외에도 두 가지 대안적인 방법이 있습니다. 하나는 LEFT JOIN을 활용하는 것이고, 다른 하나는 해당 열을 기준으로 내림차순 정렬한 뒤 LIMIT 절(MySQL 전용 문법)로 첫 번째 행만 가져오는 방식입니다.
-- 방법 1: 서브쿼리 사용
SELECT colName1, colName2, colName3
FROM tableName
WHERE colName3=(SELECT MAX(colName3) FROM tableName);
-- 방법 2: LEFT JOIN 사용
SELECT s1.colName1, s1.colName2, s1.colName3
FROM tableName s1
LEFT JOIN tableName s2 ON s1.colName3 < s2.colName3
WHERE s2.colName1 IS NULL;
-- 방법 3: ORDER BY + LIMIT 사용
SELECT colName1, colName2, colName3
FROM tableName
ORDER BY colName3 DESC
LIMIT 1;
주의 사항
동일한 최댓값을 가진 행이 여러 개 존재하는 경우에는 각 방법의 결과가 달라질 수 있습니다. LIMIT 절을 사용하면 최댓값을 가진 행 중 단 하나만 출력되며, 반면 서브쿼리 방식이나 LEFT JOIN 방식은 최댓값을 가진 모든 행을 반환합니다. 따라서 중복된 최댓값까지 모두 확인해야 하는 상황이라면 서브쿼리 또는 LEFT JOIN 방식을 사용하는 것이 좋습니다.