윈도우함수

도로롱·2025년 8월 15일

⭐목적:

해당 섹션은 프로그래머스/리트코드/해커랭커 등 외부 사이트에서 SQL 오답 문제에 대한 오답을 적고, 어느 부분에서 막혔고, 무엇을 배웠는지에 대해 간략하게 기록 하기 위함임.


❤️오답노트 활용 팁

  1. 원인 분석에 집중하세요: 정답 코드를 이해하는 것보다 내가 왜 틀렸는지를 한두 줄이라도 직접 글로 써보는 과정이 가장 중요합니다. '실수했다'에서 그치지 않고 '왜 실수했는지'를 파고들어야 같은 실수를 반복하지 않습니다.

  2. 태그를 적극적으로 활용하세요: #JOIN, #서브쿼리, #날짜함수 와 같이 태그를 꾸준히 달아두면, 나중에 특정 개념이 약하다고 느낄 때 해당 태그가 달린 문제들만 모아서 복습할 수 있습니다.

  3. 주기적으로 다시 풀어보세요: 일주일 뒤, 한 달 뒤에 오답 노트를 보면서 코드를 보지 않고 다시 한번 풀어보세요. 완벽하게 풀 수 있다면 그 개념은 이제 당신의 것이 된 겁니다.

⭐ 오답 노트 TEMPLATE

📆 날짜: 2025-08-16

📌 문제 정보

  • 출처 및 번호: [예: 프로그래머스/연도별 대장균 크기의 편차 구하기]
  • 문제 링크: [https://school.programmers.co.kr/learn/courses/30/lessons/299310]

📝 문제 요약

  • [예: '연도별 가장 큰 대장균의 사이즈와 id별 편차를 구하기']

📚 핵심 개념 및 배운 점

  • 주요 함수/문법: 집계 함수의 윈도우 함수

  • 배운 점:
    - 윈도우 함수의 컬럼 값 지정이 헷갈린다. sum/average/max/min/count 의 집계 함수는 컬럼을 지정해주어야 한다.
    - 하지만, 순위 윈도우 함수(rank/row_number/dense_rank) 같은 경우에는 뒤에 컬럼이 필요 없다.
    - 어떻게 구분해야 할까? "컬럼" 값을 계산해야 하거나, 가져와야 하는가? → 필요 시 컬럼 지정
    → 필요 없을 시 컬럼 X (단순 행의 위치나 순서에 의해 자동 계산)

집계 함수의 윈도우 함수 경우에는 특정 컬럼 값을 가지고 계산하며, 그 대상은 ( ) 괄호 안에 반드시 대상이 될 컬럼명을 기재해야한다.
ex) max(colony_size) over ( partition by year)

순위 함수의 윈도우 함수 경우에는 특정 컬럼 값을 가지고 올 필요 없이 행의 순서에 의해서 자동으로 순위 메김 (1~ n위)가 메겨지므로, 대상이 될 컬럼명을 기재할 필요가 없다
ex) dense_rank() over (order by salary desc) → 샐러리 높은 순서대로 자동 순서 메김

lag/lead() 윈도우 함수 같은 경우에도 특정 컬럼의 값을 가져와서 앞/뒤 값을 가져올 수 있으므로 컬럼명을 기재해야 한다.
ex) lead(salary) over ( order by date) → 시간 순서대로 뒷사람의 샐러리를 가져와야 함


profile
질문 없는 성장은 없다. 3년차 데이터 분석가

0개의 댓글