본문 바로가기

Data Science/SQL86

[SQL/오답] 특정 시점의 가격 추적하기: 집계와 UNION을 이용한 조건별 데이터 통합 (LeetCode1164 Medium) [리트코드] 1164. Product Price at a Given Date; UNION, WHERE (A,B) IN 1. Problem2019년 8월 16일 기준, 모든 제품의 가격을 구해야 한다.조건 1: 8월 16일 이전에 가격 변동 기록이 있다면, 그중 가장 최근(마지막) 가격을 채택한다.조건 2: 8월 16일까지 아무런 가격 변동 기록이 없다면, 초기 가격인 10으로 설정한다.핵심 과제: 모든 제품(product_id)을 누락 없이 출력하면서, 각 제품이 처한 상황(기록 있음 vs 없음)에 따라 다른 로직을 적용해야 한다.2. Solution: 두 집단의 논리적 결합기록이 존재하는 집단과 초기 상태인 집단을 각각 구한 뒤 UNION으로 합친다.3. Takeaway: 시계열 데이터 처리를 위한 객.. 2026. 2. 8.
[SQL/오답] LEFT JOIN의 함정: WHERE 절 필터링으로 인한 데이터 유실 방지 (LeetCode1158 Medium) [리트코드] Medium|1158. Market Analysis I; LEFT JOIN 1. Problem모든 사용자에 대해 가입일과 2019년에 구매한 주문 건수를 구해야 한다.핵심 과제: 2019년에 주문을 한 번도 하지 않은 사용자(3번, 4번 유저)도 결과에 반드시 포함되어야 하며, 이들의 주문 건수는 0으로 표시되어야 한다.2. Solution: 기준 테이블 보존과 ON 절 필터링모든 사용자를 유지하기 위해 Users를 왼쪽(Left)에 두고, 2019년 조건은 조인 단계(ON)에서 처리한다.3. Takeaway: 왜 WHERE 절을 쓰면 오답이 되는가? (객관적 분석)WHERE 절의 강력한 필터링 (유진 님의 오답 분석):LEFT JOIN 후에 WHERE YEAR(order_date) = 20.. 2026. 2. 8.
[SQL/오답] 집계 함수(MIN/MAX)를 활용한 기간 한정 데이터 추출 (LeetCode1084 Easy) [리트코드]|1084. Sales Analysis III; WITH, MIN/MAXhttps://leetcode.com/problems/sales-analysis-iii/description/1. Problem2019년 1분기(2019-01-01 ~ 2019-03-31) 사이에만 판매된 제품을 찾아야 한다.핵심 과제: 1분기 판매 기록이 있더라도, 그 외 기간(1분기 이전 혹은 이후)에 단 한 건이라도 판매 기록이 있다면 결과에서 제외해야 한다.2. Solution: 집계 함수(MIN/MAX)를 이용한 직관적 풀이모든 판매 기록의 '시작점'과 '끝점'이 정해진 범위 안에 있는지 체크하는 방식이다.3. Takeaway: 쿼리 설계의 정밀도와 성능 (객관적 분석)WITH + NOT IN 방식의 고찰 (유진 .. 2026. 2. 7.
[SQL/오답] 첫 해(First Year)의 상세 기록 추출: 집계와 행 데이터 매칭의 정석 (LeetCode1070 Medium) 1070. Product Sales Analysis III; WHERE-IN, 중첩 서브쿼리https://leetcode.com/problems/product-sales-analysis-iii/ 1. Problem각 제품(product_id)별로 가장 처음 판매된 연도를 찾고, 그 연도에 발생한 모든 판매 기록(수량, 가격)을 출력해야 한다.핵심 과제: 단순히 '최소 연도'를 구하는 것에 그치지 않고, 그 연도에 해당하는 quantity와 price를 유실이나 왜곡 없이 정확히 가져오는 것이다.2. Solution: 다중 컬럼 서브쿼리를 이용한 행 특정MIN(year)를 구하는 서브쿼리를 만들고, 이 결과(ID, Year) 쌍과 일치하는 원본 행을 IN 연산자로 필터링한다.3. Takeaway: 집계 함.. 2026. 2. 7.
[SQL/오답] 단일 UPDATE 구문으로 데이터 스왑(Swap)하기: CASE문의 강력한 활용 (LeetCode627 Easy) [리트코드] 627. Swap Sex of Employees; UPDATE, CASEhttps://leetcode.com/problems/swap-sex-of-employees/description/1. ProblemSalary 테이블의 sex 컬럼 값을 'm'은 'f'로, 'f'는 'm'으로 동시에 교체해야 한다.제약 조건:단 하나의 UPDATE 문만 사용할 것.중간 임시 테이블을 생성하지 말 것.SELECT 문을 포함하지 말 것.2. Solution: 행별 조건 분기를 통한 데이터 업데이트SET 절 내부에 CASE문을 배치하여, 각 행의 현재 상태에 따라 업데이트될 값을 실시간으로 결정한다.3. Takeaway: 효율적인 데이터 조작(DML)을 위한 분석sex = CASE의 매커니즘: 일반적인 업데이.. 2026. 2. 6.
[SQL/오답] 연속된 ID 스왑(Swap)하기: MOD 함수와 스칼라 서브쿼리의 활용 (LeetCode626 Medium) 626. Exchange Seats; 스칼라 서브쿼리, MOD함수https://leetcode.com/problems/exchange-seats/description/1. Problem인접한 두 학생의 좌석 ID를 서로 바꿔야 한다.핵심 조건:홀수 번호 ID(1, 3, 5...)는 다음 번호(+1)로 보낸다.짝수 번호 ID(2, 4, 6...)는 이전 번호(-1)로 보낸다.예외: 전체 학생 수가 홀수일 때, 마지막 학생은 자리를 바꾸지 않는다.2. Solution: CASE문을 이용한 세 가지 조건 분기나머지 연산(MOD)을 통해 홀/짝을 구분하고, 서브쿼리로 전체 개수를 파악하여 예외를 처리한다.3. Takeaway: 왜 COUNT(*)를 서브쿼리로 감싸야 하는가? (객관적 분석)집계 함수의 실행 시점.. 2026. 2. 6.