강사 테이블입니다.
# ID, name, dept_name, salary
'83821', 'Brandt', 'Comp. Sci.', '92000.00'
'58583', 'Califieri', 'History', '62000.00'
'76766', 'Crick', 'Biology', '72000.00'
'22222', 'Einstein', 'Physics', '95000.00'
'32343', 'El Said', 'History', '60000.00'
'33456', 'Gold', 'Physics', '87000.00'
'45565', 'Katz', 'Comp. Sci.', '75000.00'
'98345', 'Kim', 'Elec. Eng.', '80000.00'
'15151', 'Mozart', 'Music', '40000.00'
'76543', 'Singh', 'Finance', '80000.00'
'10101', 'Srinivasan', 'Comp. Sci.', '65000.00'
'12121', 'Wu', 'Finance', '90000.00'
이 테이블을 이용하여, dept_name별 max salary를 구합니다.
SELECT dept_name, max(salary) as salaryMax FROM university_1.instructor group by dept_name
로 간단히 구했습니다. (하기와 같습니다.)
Biology, 72000.00
Comp. Sci., 92000.00
Elec. Eng., 80000.00
Finance, 90000.00
History, 62000.00
Music, 40000.00
Physics, 95000.00
쿼리가 만들어준 테이블로 다시 최소 salary의 dept_name과 값을 구하고자 합니다.
select a.dept_name, min(salaryMax) from( SELECT dept_name, max(salary) as salaryMax FROM university_1.instructor group by dept_name ) a
상기처럼 했더니, 결과가 쌩뚱맞게 biology 가 나오네요. 정답은 Music, 40000 인데 말이죠.
Biology, 40000.00
요약하면, 결과가
# dept_name, salaryMax
'Music', '40000.00'
music, 40000를 도출해야 합니다.
고견 부탁드립니다.
그룹바이 표준 사용법에 어긋나는 MySQL 에서만 오류가 나지 않는 비표준 시용법입니다.
여러 건의 salaryMax 중에 MIN(salaryMax) 1건만 집계하는 구문이므로
여러건의 dept_name 을 함께 표현하려면 집계함수를 써서 1건으로 집계해야 합니다.
집계함수 없이 그냥 쓰면 1줄에 여러개를 표현하는게 말이 안되므로 오류입니다.
1건의 집계결과와 여러건의 비집계결과를 함께 표현한다는게 말이 안된는 거죠.
하지만 MySQL 에서는 오류가 나지 않고 정상적으로 수행되며
여러건의 자료중 첫번째로 읽은 값 1개를 표현해 줍니다.
정상 수행된다고 해서 마구 사용해서는 안되는 구문입니다.
물론, 이러한 특성을 잘 이해하고서 MySQL만의 특징을 역으로 이용하는 것은 좋습니다.
다만, 이러한 특징을 모른 채 습관적으로 사용해 왔다면
표준 문법을 사용하기를 권장합니다.