SET 문으로 SELECT 결과를 사용자 변수에 할당하기
MySQL에서 SET 문을 사용하여 SELECT 쿼리의 결과를 사용자 변수에 할당하려면, SELECT 문을 괄호(())로 감싼 서브쿼리 형태로 작성해야 합니다.
이때 반드시 지켜야 할 조건이 있습니다. 바로 해당 SELECT 문이 단일 값(single value)만 반환해야 한다는 것입니다. 여러 행이나 여러 열을 반환하는 쿼리는 SET 문에 할당할 수 없습니다.
예제 테이블: Tender
설명을 돕기 위해 다음과 같은 'Tender' 테이블의 데이터를 사용하겠습니다.
mysql> select * from Tender; +----+---------------+--------------+ | Sr | CompanyName | Tender_value | +----+---------------+--------------+ | 1 | Abc Corp. | 250.369003 | | 2 | Khaitan Corp. | 265.588989 | | 3 | Singla group. | 220.255997 | | 4 | Hero group. | 221.253006 | | 5 | Honda group | 225.292266 | +----+---------------+--------------+ 5 rows in set (0.04 sec)
사용자 변수에 최댓값 할당하기
아래 쿼리는 tender_value 컬럼의 최댓값을 구한 뒤, ROUND() 함수로 소수점 둘째 자리까지 반올림하여 변수 @Val_Max에 할당합니다.
mysql> SET @Val_Max = (SELECT ROUND(MAX(tender_value),2) from tender); Query OK, 0 rows affected (0.00 sec) mysql> Select @Val_Max; +----------+ | @Val_Max | +----------+ | 265.59 | +----------+ 1 row in set (0.00 sec)
실행 결과를 보면, Tender 테이블에서 가장 큰 입찰 금액인 265.588989가 소수점 둘째 자리까지 반올림되어 265.59라는 값으로 @Val_Max 변수에 저장된 것을 확인할 수 있습니다.
이처럼 SET 문과 서브쿼리를 조합하면 집계 함수(MAX, MIN, COUNT, AVG 등)의 결과를 변수에 담아 이후 쿼리에서 재활용할 수 있어 매우 유용합니다.