| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 윈도우함수
- 신입 데이터분석가
- funnel
- 린분석
- pandas
- 데이터리안
- leetcode
- 취준
- LEFTJOIN
- 프로그래머스
- Datarian
- 데이터분석
- SQL
- 퍼널분석
- 누적합
- 서브쿼리
- 리텐션
- MYSQL
- 윈도우 함수
- python
- Retention
- 그로스해킹
- row_number
- rank
- dense_rank
- 순위함수
- SolveSQL
- advent of sql
- regexp
- 독서
- Today
- Total
데이터 분석
SELECT절 Correlated Subquery 본문
# 1
문제
일 별로 pm10의 이동 평균을 계산하여라.
이동 평균은 당일, 전날, 다음날의 pm10을 이용해 계산할 것.
단, 데이터가 시작하는 2022년 1월 1일에는 당일과 다음날의 pm10 수치 정보만 사용할 것.
Solution
✅ 윈도우 함수 사용하는 방법
SELECT measured_at
, pm10
, AVG(pm10) OVER(ORDER BY measured_at ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS pm10_running_average
FROM measurements
Advent of SQL 2024 챌린지의 [DAY 14] 문제에서 이동평균을 SQL로 구현하는 방법을 공부했기 때문에 쉽게 해결하였다.
https://hwangbyeongho.tistory.com/29
[Day 14] solvesql | Advent of SQL 2024 | 전력 소비량 이동 평균 구하기
전력 소비량 이동 평균 구하기 문제 조건1. 2017년 1월 1일 0시부터 2017년 2월 1일 0시까지 10분 단위로 1시간 범위의 단순 이동 평균을 계산2. 이동 평균 값은 소수점 셋째 자리에서 반올림 하여 둘
hwangbyeongho.tistory.com
✅ SELECT 상관 서브쿼리 사용하는 방법
SELECT measured_at
, pm10
, (SELECT AVG(m2.pm10) FROM measurements m2 WHERE m2.measured_at BETWEEN DATE_SUB(m1.measured_at, INTERVAL 1 DAY) AND DATE_ADD(m1.measured_at, INTERVAL 1 DAY)) AS pm10_running_average
FROM measurements m1
종종 윈도우 함수를 사용하지 않고 해결을 요하는 코딩 테스트도 있다고 한다.
핵심은 SELF-JOIN 방법과 같이 동일한 테이블을 별도의 2개 테이블로 간주하여 접근하는 것이다.
m1
| measured_at | pm10 |
| 2022-01-02 | 39 |
m2
| measured_at | pm10 |
| 2022-01-01 | 31 |
| 2022-01-02 | 39 |
| 2022-01-03 | 28 |
# 2
문제
pm10의 누적합을 계산하여라.
누적합은 당일의 pm10 수치와 이전 날짜의 pm10 수치를 모두 합산하는 방식으로 계산할 것.
Solution
✅ 윈도우 함수 사용하는 방법
SELECT measured_at
, pm10
, SUM(pm10) OVER(ORDER BY measured_at) AS pm10_running_total
FROM measurements
ORDER BY measured_at
Advent of SQL 2024 챌린지의 [DAY 23] 문제에서 누적합을 SQL로 구현하는 방법을 공부했기 때문에 쉽게 해결하였다.
https://hwangbyeongho.tistory.com/42
[Day 23] solvesql | Advent of SQL 2024 | 유량 지표와 저량 지표
유량(Flow)과 저량(Stock) ‘연도별로 새롭게 소장하게 된 작품의 수’와 같이 일정 기간 동안 측정되는 지표를 ‘유량(Flow) 지표’라고 하고, ‘누적 소장 작품 수’와 같이 특정 시점에 측정되는
hwangbyeongho.tistory.com
✅ SELECT 상관 서브쿼리 사용하는 방법
SELECT measured_at
, pm10
, (SELECT SUM(pm10) FROM measurements m2 WHERE m2.measured_at <= m1.measured_at) AS pm10_running_total
FROM measurements m1
m1
| measured_at | pm10 |
| 2022-01-03 | 28 |
m2
| measured_at | pm10 |
| 2022-01-01 | 31 |
| 2022-01-02 | 39 |
| 2022-01-03 | 28 |
💡DATE_ADD/SUB() 관련 자료
https://dev.mysql.com/doc/refman/9.1/en/date-and-time-functions.html#function_date-add
'데이터리안 | SQL 데이터 분석 캠프 | 실전반 > 문제 해결 역량' 카테고리의 다른 글
| [퍼널 분석] solvesql | 난이도 4 | 페이지에서 스크롤을 내렸을까? (0) | 2025.01.24 |
|---|---|
| [퍼널 분석] solvesql | 난이도 4 | 입문반 페이지를 본 세션 찾기 (1) | 2025.01.24 |
| solvesql | 난이도 4 | Stickiness (2) | 2025.01.20 |
| solvesql | 난이도 4 | Classic Retention (1) | 2025.01.20 |
| solvesql | 난이도 3 | 배송 예정일 예측 성공과 실패💡 (1) | 2025.01.07 |