MySQL에서 테이블에 저장된 값 중 가장 큰 금액(maximum amount)을 가진 모든 제품을 조회하려면 MAX() 함수와 서브쿼리(subquery)를 함께 사용하면 됩니다. 이때 MAX()는 해당 컬럼의 최댓값을 구하는 역할을 합니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
ProductId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
ProductName varchar(100),
ProductAmount int
);
Query OK, 0 rows affected (0.53 sec)2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable(ProductName,ProductAmount) values('Product-1',60);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(ProductName,ProductAmount) values('Product-2',40);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(ProductName,ProductAmount) values('Product-3',75);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(ProductName,ProductAmount) values('Product-4',50);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(ProductName,ProductAmount) values('Product-5',75);
Query OK, 1 row affected (0.12 sec)3. 전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-----------+-------------+---------------+ | ProductId | ProductName | ProductAmount | +-----------+-------------+---------------+ | 1 | Product-1 | 60 | | 2 | Product-2 | 40 | | 3 | Product-3 | 75 | | 4 | Product-4 | 50 | | 5 | Product-5 | 75 | +-----------+-------------+---------------+ 5 rows in set (0.00 sec)
4. 최대 금액을 가진 제품 조회하기
최대 금액을 가진 모든 제품을 표시하는 쿼리는 다음과 같습니다. WHERE 절 안의 서브쿼리가 먼저 실행되어 테이블 전체의 최대 금액(75)을 구하고, 그 값과 일치하는 행만 반환됩니다.
mysql> select *from DemoTable where ProductAmount=(select max(ProductAmount) from DemoTable);
실행 결과는 아래와 같습니다.
+-----------+-------------+---------------+ | ProductId | ProductName | ProductAmount | +-----------+-------------+---------------+ | 3 | Product-3 | 75 | | 5 | Product-5 | 75 | +-----------+-------------+---------------+ 2 rows in set (0.00 sec)
결과를 보면 최대 금액인 75를 가진 Product-3과 Product-5 두 개의 제품이 모두 조회된 것을 확인할 수 있습니다. 이처럼 서브쿼리 방식을 사용하면 최댓값이 여러 행에 존재하더라도 해당하는 모든 제품을 한 번에 가져올 수 있다는 장점이 있습니다.