VARCHAR 열에서 최소값과 최대값 구하기
MySQL에서 VARCHAR 타입으로 저장된 숫자 데이터의 최소값(MIN)과 최대값(MAX)을 구하려면 CAST() 함수를 사용해 값을 숫자형으로 변환한 뒤 집계해야 합니다. 문자열 그대로 MIN/MAX를 적용하면 사전식(문자열) 비교가 수행되어 의도와 다른 결과가 나올 수 있기 때문입니다.
1단계: 테이블 생성
먼저 테이블을 생성합니다.
mysql> create table DemoTable
(
Value varchar(100)
);
Query OK, 0 rows affected (0.75 sec)2단계: 레코드 삽입
INSERT 명령을 사용해 테이블에 샘플 레코드를 삽입합니다.
mysql> insert into DemoTable values('190');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('230');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('120');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('189');
Query OK, 1 row affected (0.19 sec)3단계: 전체 레코드 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+ | Value | +-------+ | 190 | | 230 | | 120 | | 189 | +-------+ 4 rows in set (0.00 sec)
4단계: 최소값과 최대값 조회
VARCHAR 열에서 최소값과 최대값을 가져와 각각 별도의 열로 표시하는 쿼리는 다음과 같습니다.
mysql> select min(cast(Value AS SIGNED)) AS Min, max(cast(Value AS SIGNED)) AS Max from DemoTable;
실행 결과는 다음과 같습니다.
+------+------+ | Min | Max | +------+------+ | 120 | 230 | +------+------+ 1 row in set (0.03 sec)
핵심 포인트 정리
- CAST(Value AS SIGNED): VARCHAR 값을 부호 있는 정수로 변환해 올바른 숫자 비교를 가능하게 합니다.
- 별칭(Alias) 활용: AS Min, AS Max를 지정해 결과를 두 개의 독립된 열로 깔끔하게 출력할 수 있습니다.
- 주의 사항: CAST 없이 MIN/MAX를 사용하면 '120', '189' 등이 문자열 기준으로 비교되어 잘못된 값이 반환될 수 있습니다.