Data Science/SQL86 [SQL/오답] 기간별 가변 단가 적용과 가중 평균 산출: NULL 예외 처리 (LeetCode1251 Easy) [리트코드] |1251. Average Selling Price; LEFT JOIN, IFNULL1. Problem각 제품의 기간별 가격이 명시된 Prices 테이블과 실제 판매 내역인 UnitsSold 테이블을 결합하여, 제품별 평균 판매 단가를 구해야 한다.핵심 과제: 판매 시점(purchase_date)이 가격 적용 기간(start_date ~ end_date) 사이에 있는 데이터를 정확히 매칭해야 하며, 판매량이 없는 제품은 0으로 표시해야 한다.2. Solution: 기간 매칭 조인과 가중 평균 계산BETWEEN을 활용한 조인 조건 설정과 집계 함수를 이용한 가중 평균 식을 작성한다.3. Takeaway: 쿼리 설계의 정밀도와 예외 처리 (객관적 분석)비등가 조인(Non-Equi Join)의 활.. 2026. 2. 9. [SQL/오답] 비율(Percentage) 산출의 정석: COUNT 대신 AVG(CASE WHEN)을 써야 하는 이유 (LeetCode1211 Easy) [리트코드] |1211. Queries Quality and Percentage; CASE WHEN 비율문제!https://leetcode.com/problems/queries-quality-and-percentage/ 1. Problem각 쿼리명(query_name)별로 두 가지 지표를 계산해야 한다.Quality: (평점 / 노출 순위)의 평균값Poor Query Percentage: 평점이 3점 미만인 데이터가 전체에서 차지하는 비율(%) 단순한 집계를 넘어, 특정 조건을 만족하는 데이터의 '비중'을 어떻게 계산할 것인가가 문제의 핵심이다.2. Solution: AVG(CASE WHEN) 패턴의 마법조건에 맞는 경우 1, 아니면 0을 부여한 뒤 이 값들의 평균을 내면 곧바로 비율이 된다.3. Tak.. 2026. 2. 8. [SQL/오답] 누적합(Running Total)의 마법: 한계치를 넘지 않는 마지막 행 추출하기 (LeetCode1204 Medium) [리트코드] |1204. Last Person to Fit in the Bus; 인라인뷰, SUM OVER 누적합https://leetcode.com/problems/last-person-to-fit-in-the-bus/description/1. Problem버스 승차 정원이 몸무게 총합 1,000kg으로 제한되어 있을 때, 승차 순서(turn)에 따라 마지막으로 버스에 탈 수 있는 사람의 이름을 찾아야 한다.핵심 난관: 각 행은 독립적인 데이터이지만, 승차 여부는 **'나보다 먼저 탄 사람들의 무게 합'**에 의존한다. 즉, 행과 행 사이의 연속적인 계산이 필요하다.2. Solution: 인라인 뷰와 SUM() OVER()의 결합윈도우 함수를 이용해 순차적인 누적합을 구한 뒤, 필터링과 정렬을 통해 최.. 2026. 2. 8. [SQL/오답] 조건부 집계의 정석: CASE WHEN을 집계 함수 내부로 넣어야 하는 이유 (LeetCode1193 Medium) [리트코드]Medium|1193. Monthly Transactions I; CASE WHENhttps://leetcode.com/problems/monthly-transactions-i/description/1. Problem월별, 국가별로 전체 거래 건수/금액과 승인된(approved) 거래 건수/금액을 각각 산출해야 한다.핵심 과제: 하나의 GROUP BY 안에서 전체 통계와 특정 조건을 만족하는 통계를 동시에 추출하는 효율적인 구조를 설계하는 것이다.2. Solution: 집계 함수 내부에 논리 심기CASE WHEN으로 조건에 맞는 값(1 또는 amount)만 골라낸 뒤, 그 결과물들을 한꺼번에 SUM으로 합산한다.3. Takeaway: 집계 함수와 CASE WHEN의 올바른 위치 (객관적 분석).. 2026. 2. 8. [SQL/오답] 데이터 피벗(Pivot): 세로로 흐르는 데이터를 가로로 펼치는 기술 (LeetCode1179 Easy) [리트코드] |1179. Reformat Department Table; CASE WHENhttps://leetcode.com/problems/reformat-department-table/description/1. Problem부서별 월 매출이 여러 행(Row)으로 나열된 Long Format 데이터를, 각 월이 컬럼(Column)이 되는 Wide Format으로 재구성해야 한다.핵심 과제: 하나의 id에 대해 12개의 월 데이터를 한 줄로 압축하여 표현하는 '데이터 재구조화' 능력을 테스트한다.2. Solution: SUM(CASE WHEN)을 이용한 수동 피벗각 월에 해당하는 값만 추출하고, SUM 함수를 통해 그룹화된 id별로 데이터를 한 행에 모은다.3. Takeaway: 왜 IN 서브쿼리는 정.. 2026. 2. 8. [SQL/오답] 첫 주문(First Order) 필터링과 조건부 비율 산출 (LeetCode 1174 Medium) [리트코드] Medium|1174. Immediate Food Delivery II; AVG1. Problem고객별로 가장 첫 번째 주문을 찾아내고, 그중 '즉시 배송(order_date = pref_date)'인 주문이 전체 첫 주문 중 몇 퍼센트를 차지하는지 계산해야 한다.핵심 과제: 단순히 전체 데이터를 집계하는 것이 아니라, 고객별로 MIN(order_date)에 해당하는 단 한 개의 행만 골라낸 뒤 통계를 내야 한다.2. Solution: 서브쿼리 필터링과 불리언(Boolean) 평균다중 컬럼 IN 연산자를 사용하여 첫 주문 행들을 먼저 확보한 뒤 비율을 구한다.3. Takeaway: 효율적인 쿼리 설계를 위한 분석다중 컬럼 IN 연산자의 위력: customer_id와 MIN(order_date.. 2026. 2. 8. 이전 1 ··· 7 8 9 10 11 12 13 ··· 15 다음