728x90
반응형

2025/05 24

RANK, ROW_NUMBER를 활용한 순위 처리

📘 2-5. RANK, ROW_NUMBER를 활용한 순위 처리실무에서는 사용자 활동 순위, 인기 상품 TOP N, 최신 데이터 추출 등 순위 기반 데이터가 자주 필요합니다.이럴 때 윈도우 함수(Window Function) 중 RANK(), ROW_NUMBER(), DENSE_RANK() 등을 활용하면 효율적으로 처리할 수 있습니다.📌 기본 개념: ROW_NUMBER / RANK / DENSE_RANKROW_NUMBER(): 동일 값이 있어도 고유한 순번을 부여 (1, 2, 3...)RANK(): 동일 값은 같은 순위를 부여하고 건너뜀 (1, 1, 3...)DENSE_RANK(): 동일 값은 같은 순위를 부여하고 건너뛰지 않음 (1, 1, 2...)✅ 예제 1: 사용자별 총 구매액 순위SELECT ..

조건 만족 누적합 (Cumulative SUM)

📘 2-4. 조건 만족 누적합 (Cumulative SUM)데이터 분석이나 실무 통계에서는 특정 조건을 만족하는 값의 누적합(Cumulative SUM)을 구해야 할 때가 많습니다.예를 들어, 일자별 매출 누계, 유저 가입자 누적 수 등을 구할 때 사용됩니다.📌 기본 개념: 윈도우 함수 (Window Function)MySQL 8.0 이상에서는 OVER() 윈도우 함수를 이용해 누적합을 쉽게 계산할 수 있습니다.SELECT sale_date, amount, SUM(amount) OVER (ORDER BY sale_date) AS cumulative_salesFROM sales;📌 의미: 날짜 기준으로 amount 값을 누적해서 더한 컬럼을 생성합니다.✅ 예제 1: 일자별 매출 누적합SELEC..

GROUP BY와 CASE WHEN을 활용한 조건부 집계

📘 2-3. GROUP BY와 CASE WHEN을 활용한 조건부 집계실무에서는 하나의 쿼리에서 여러 조건별로 데이터를 집계해야 하는 경우가 많습니다.이럴 때 GROUP BY와 CASE WHEN을 함께 사용하면 조건별 카운트, 합계 등을 효율적으로 처리할 수 있습니다.📌 기본 개념CASE WHEN을 SUM 또는 COUNT와 함께 사용하여 조건에 맞는 데이터를 분기 처리합니다.SELECT user_id, SUM(CASE WHEN status = 'complete' THEN 1 ELSE 0 END) AS complete_count, SUM(CASE WHEN status = 'cancel' THEN 1 ELSE 0 END) AS cancel_countFROM ordersGROUP BY user_id;..

서브쿼리 vs JOIN 언제 어떻게 쓰나

📘 2-2. 서브쿼리 vs JOIN 언제 어떻게 쓰나MySQL에서 같은 데이터를 가져오더라도 서브쿼리와 JOIN 중 어떤 방식을 선택하느냐에 따라 성능과 가독성이 달라질 수 있습니다.이번 포스팅에서는 실무 상황에서 서브쿼리와 JOIN을 언제, 어떻게 써야 하는지 비교합니다.📌 기본 개념 요약서브쿼리 (Subquery): 쿼리 안에 또 다른 SELECT 쿼리를 사용하는 방식JOIN: 여러 테이블을 키를 기준으로 연결하여 한 번에 데이터를 가져오는 방식✅ 예제 1: 사용자별 총 주문 금액 구하기🔹 서브쿼리 방식SELECT u.id, u.name, (SELECT SUM(o.price) FROM orders o WHERE o.user_id = u.id) AS total_spentFROM users ..

728x90
반응형