인프런- 데이터 분석을 위한 고급 SQL: 섹션3 - 서브쿼리 Top Earners 문제풀이(틀림)

르네·2023년 9월 26일
0

SQL

목록 보기
25/63

인프런 강의 <데이터 분석을 위한 고급 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

profile
데이터분석 공부로그

0개의 댓글