Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 29 | 30 | 31 |
Tags
- 데이터분석
- 누적합
- MYSQL
- 서브쿼리
- regexp
- 린분석
- 신입 데이터분석가
- LEFTJOIN
- Retention
- 윈도우 함수
- leetcode
- 데이터리안
- 독서
- SolveSQL
- advent of sql
- 취준
- 그로스해킹
- SQL
- funnel
- row_number
- Datarian
- 순위함수
- 퍼널분석
- python
- 프로그래머스
- 리텐션
- 윈도우함수
- pandas
- rank
- dense_rank
Archives
- Today
- Total
데이터 분석
[Day 22] solvesql | Advent of SQL 2024 | 친구 수 집계하기💡 본문
친구 수 집계하기
✔️0215 복습
문제 조건
1. 데이터베이스에 포함된 모든 사용자에 대해 각 사용자의 친구 수를 집계
2. 친구 수가 많은 사용자부터 출력하며, 만약 친구 수가 같은 사용자가 여럿이라면 그 사이에서는 사용자 ID가 작은 사용자가 먼저 출력
Solution
WITH friends_count AS (
SELECT user_id,
COUNT(CASE WHEN user_id = e.user_a_id THEN 1 END) +
COUNT(CASE WHEN user_id = e.user_b_id THEN 1 END) AS num_friends
FROM users u
LEFT JOIN edges e
ON u.user_id = e.user_a_id OR u.user_id = e.user_b_id
GROUP BY user_id
)
SELECT user_id, num_friends
FROM friends_count
ORDER BY num_friends DESC, user_id ASC;
/*
WITH step1 AS (
SELECT user_a_id AS user_id
, COUNT(*) AS num_friends
FROM edges
GROUP BY user_a_id
UNION ALL
SELECT user_b_id
, COUNT(*)
FROM edges
GROUP BY user_b_id
), step2 AS (
SELECT user_id
, SUM(num_friends) AS num_friends
FROM step1
GROUP BY user_id
)
SELECT u.user_id
, CASE WHEN s.num_friends IS NOT NULL THEN s.num_friends
ELSE 0
END AS num_friends
FROM users u
LEFT JOIN step2 s ON u.user_id = s.user_id
ORDER BY s.num_friends DESC, u.user_id
*/
✅ users 테이블까지 사용하여 친구가 없는 user_id까지 출력하도록 설계해야 한다.
✅ case 문에서 조건을 만족하지 못한 경우 NULL을 반환한다.
✅ COUNT는 NULL 값을 제외하고 계산하므로, 매칭되지 않는 경우 해당 사용자에 대한 값은 0이 된다.
'SQL > solvesql' 카테고리의 다른 글
| [Day 24] solvesql | Advent of SQL 2024 | 이상 사용자 탐지💡 (2) | 2024.12.25 |
|---|---|
| [Day 23] solvesql | Advent of SQL 2024 | 유량 지표와 저량 지표 (2) | 2024.12.25 |
| [Day 21] solvesql | Advent of SQL 2024 | 세션 유지 시간을 10분으로 재정의하기⭐💡 (0) | 2024.12.24 |
| [Day 20] solvesql | Advent of SQL 2024 | 미세먼지 수치의 계절간 차이💡 (1) | 2024.12.20 |
| [Day 19] solvesql | Advent of SQL 2024 | 전국 카페 주소 데이터 정제하기💡 (3) | 2024.12.19 |