인프런 강의 <데이터 분석을 위한 고급 SQL>을 듣고, 중요한 점을 정리한 글입니다.
SELECT MAX(earnings), COUNT(MAX(earnings))
FROM (SELECT salary * months
FROM Employee
GROUP BY salary * months
) earnings
SELECT MAX(earnings), COUNT(*)
FROM Employee
WHERE earnings IN (SELECT salary * months AS earnings FROM Employee)
: 둘 다 아예 에러가 뜬다.
(WHERE절 서브쿼리)
SELECT months * salary AS earnings
, COUNT(*)
FROM Employee
WHERE months * salary = (SELECT MAX(months* salary) FROM Employee)
GROUP BY earnings
(HAVING절 서브쿼리)
SELECT months * salary AS earnings
, COUNT(*)
FROM Employee
GROUP BY earnings
HAVING earnings = (SELECT MAX(months* salary) FROM Employee)
SELECT에 쓴 alias는 WHERE절에 못씀. 에러남. GROUP BY부터는 쓸 수 있음.
이 쿼리문에서 마지막 GROUP BY earnings를 안 넣으면 오류가 나는 이유는?
-> 마지막의 GROUP BY earnings를 제거하면 오류가 나는 이유는 SQL에서 집계 함수 (예: COUNT)를 사용하는 경우, 그룹화되지 않은 열을 SELECT 절에 포함할 수 없기 때문입니다.
여기서 GROUP BY earnings는 months salary 값을 기준으로 결과를 그룹화하는 부분입니다. COUNT()는 그룹화된 결과에서 각 그룹의 행 수를 세는 집계 함수입니다. 그러나 GROUP BY earnings를 제거하면 earnings 열을 그룹화하지 않았으므로 earnings 열을 SELECT 절에 사용할 수 없습니다.
집계함수: COUNT: 특정 열 또는 데이터 집합의 행 수를 세는 데 사용. ex. SUM, AVG, MAX, MIN