Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 테이블의 특정 부분에서 최솟값과 최댓값 조회하는 방법

MySQL에서 테이블 전체가 아닌 일부 행(limit으로 지정한 범위)에 대해서만 최솟값(MIN)과 최댓값(MAX)을 구하려면, 서브쿼리를 활용하면 됩니다. 기본 문법은 다음과 같습니다.

SELECT MIN(컬럼명) AS 별칭1, MAX(컬럼명) AS 별칭2
FROM
(SELECT 컬럼명 FROM 테이블명 LIMIT 개수) tbl1;

핵심은 내부 서브쿼리에서 LIMIT 절로 원하는 만큼의 행만 먼저 가져온 뒤, 그 결과 집합에 대해 MIN과 MAX 함수를 적용하는 것입니다.

1. 예제 테이블 생성하기

먼저 실습에 사용할 테이블을 생성합니다. 다음 쿼리를 실행하세요.

mysql> CREATE TABLE MinAndMaxValueDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Value int
-> );
Query OK, 0 rows affected (0.52 sec)

2. 데이터 삽입하기

INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.

mysql> INSERT INTO MinAndMaxValueDemo(Value) VALUES(10);
Query OK, 1 row affected (0.16 sec)

mysql> INSERT INTO MinAndMaxValueDemo(Value) VALUES(100);
Query OK, 1 row affected (0.11 sec)

mysql> INSERT INTO MinAndMaxValueDemo(Value) VALUES(50);
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO MinAndMaxValueDemo(Value) VALUES(40);
Query OK, 1 row affected (0.12 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> SELECT * FROM MinAndMaxValueDemo;

실행 결과는 다음과 같습니다.

+----+-------+
| Id | Value |
+----+-------+
| 1 | 10 |
| 2 | 100 |
| 3 | 50 |
| 4 | 40 |
+----+-------+
4 rows in set (0.00 sec)

4. 테이블 일부에서 최솟값과 최댓값 조회하기

이제 앞서 소개한 서브쿼리 방식을 적용해 보겠습니다. 아래 쿼리는 처음 3개 행(LIMIT 3)에 대해서만 최솟값과 최댓값을 계산합니다.

mysql> SELECT MIN(Value) AS MinimumValue, MAX(Value) AS MaximumValue FROM
-> (SELECT Value FROM MinAndMaxValueDemo LIMIT 3) tbl1;

실행 결과는 다음과 같습니다.

+--------------+--------------+
| MinimumValue | MaximumValue |
+--------------+--------------+
| 10 | 100 |
+--------------+--------------+
1 row in set (0.07 sec)

결과 해석

테이블에는 총 4개의 행이 있지만, 서브쿼리에서 LIMIT 3을 사용했기 때문에 Id가 1~3인 행(Value: 10, 100, 50)만 집계 대상이 됩니다. 따라서 최솟값은 10, 최댓값은 100으로 반환됩니다. 만약 4번째 행까지 포함하고 싶다면 LIMIT 4로 변경하면 되고, 이 경우에도 최댓값은 100으로 동일하게 나타납니다.

이처럼 서브쿼리와 LIMIT 절을 조합하면 테이블의 특정 범위에 대해서만 집계 함수를 손쉽게 적용할 수 있습니다.