
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM (
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES,
RANK() OVER (PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) FAV_RANK
FROM REST_INFO
ORDER BY FOOD_TYPE DESC ) a
WHERE a.FAV_RANK = 1
SELECT Department, MAX(Salary)
FROM Employees
GROUP BY Department;
위 쿼리문의 경우 부서와 부서별 최고 연봉이 알맞게 출력됨.
SELECT Department, EmployeeName, MAX(Salary)
FROM Employees
GROUP BY Department;
MAX()와 함께 사용하지 않은 열(EmployeeName)이 SELECT문에 포함될 때 잘못된 값이 반환될 수 있음
왜?
EmployeeName의 값을 반환하려고 하지만, 그룹화된 각 부서에서 어느 직원의 이름을 반환해야 할지 정의되지 않았기 때문에 임의값이 반환됨.
SELECT e.Department, e.EmployeeName, e.Salary
FROM Employees e
JOIN (
SELECT Department, MAX(Salary) AS MaxSalary
FROM Employees
GROUP BY Department
) m ON e.Department = m.Department AND e.Salary = m.MaxSalary;
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM (
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES,
RANK() OVER (PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) FAV_RANK
FROM REST_INFO
ORDER BY FOOD_TYPE DESC ) a
WHERE a.FAV_RANK = 1