Data Science/SQL86 [SQL/오답] 집계 함수와 CASE문 순서에 따른 영향 (LeetCode3497 Medium) 1. Problem구독 서비스의 사용자 행동 패턴을 분석하기 위해 '무료 체험에서 유료 결제로 전환한 유저'를 식별하고, 각 기간의 평균 활동 시간을 계산해야 한다. 이때 한 사용자의 데이터가 여러 행(Row)으로 나뉘어 있으므로, 이를 사용자별로 그룹화하여 하나의 행으로 출력하는 것이 핵심이다.2. Solution사용자별로 그룹화(GROUP BY user_id)한 상태에서 특정 조건의 평균만 구하기 위해 AVG(CASE WHEN...) 패턴을 사용한다.필터링 로직: HAVING 절에서 MAX(조건식) 테크닉을 사용하여 두 상태를 모두 경험한 '전환자'만 골라낸다.3. Takeaway (Why I Failed)처음에는 CASE WHEN 안에 AVG를 넣는 실수를 했다. 이 과정을 통해 SQL의 작동 원리.. 2026. 2. 17. [SQL/오답] Recursive CTE의 두 방향성: 조직 계층 및 예산 합산(LeetCode3482 Hard) 1. Problem조직 구조 데이터에서 각 직원의 계층 레벨, 관리하는 팀 규모(직/간접 부하 포함), 그리고 본인과 하위 직원을 포함한 전체 급여 예산을 계산해야 한다. 단순히 직속 부하만 찾는 것이 아니라, 최하위 노드부터 최상위 관리자까지 이어지는 모든 경로를 파악하여 누적 집계를 수행하는 것이 이 문제의 핵심 난제이다.2. Solution레벨 확정을 위한 Top-Down(하향식) 탐색과 예산 집계를 위한 Bottom-Up(상향식) 탐색을 분리하여 설계한 뒤, 마지막에 결합하는 방식을 채택한다.3. Takeaway (핵심 통계 논리)단순한 계층 조회를 넘어 비즈니스 지표(예산)를 산출하기 위해 다음의 기술적 원리를 정립한다.재귀의 방향성 분리: Hierarchy는 위에서 아래로 내려가며 '레벨'을 .. 2026. 2. 17. [SQL/오답] 정규표현식(REGEXP) 오탐 방지와 대소문자 구분 (LeetCode3465 Easy) 1. Problem제품 설명(description) 내에서 특정 규칙(SN0000-0000)을 따르는 유효한 시리얼 번호를 찾아야 한다. 단순히 패턴을 포함하는지를 넘어, 시리얼 번호 뒤에 숫자가 더 붙는 경우(예: SN1234-56789)를 '오탐(False Positive)'으로 걸러내는 정밀한 필터링 설계가 요구된다.2. Solution단어 경계(\b)의 불안정성을 해결하기 위해 명시적 경계 조건을 설정하고, 캐릭터 셋 충돌 문제를 LIKE BINARY로 우회하여 해결한다.정규식 패턴 분석: (^|[^A-Z0-9])와 ([^0-9A-Z]|$)를 사용하여 시리얼 번호 앞뒤에 다른 문자나 숫자가 붙어 있지 않음을 명확히 정의한다.대소문자 구분 우회: REGEXP BINARY 사용 시 발생하는 캐릭터 셋.. 2026. 2. 16. [SQL/오답] 데이터 무결성을 위한 복합 정규표현식 (LeetCode 3451 Hard) 1. Problem서버 로그 데이터에서 유효하지 않은 IPv4 주소를 식별하고 그 빈도를 계산해야 한다. 유효하지 않은 조건은 세 가지다.마디(Octet)가 4개가 아닌 경우특정 마디의 숫자가 255를 초과하는 경우마디에 불필요한 앞자리 0(Leading Zeros)이 포함된 경우단순한 패턴 매칭을 넘어 숫자의 자릿수와 크기 범위를 정규식으로 치환하는 논리가 핵심이다.2. Solution각 조건을 개별적인 정규표현식 패턴으로 정의하여 OR 연산으로 결합한다.자릿수 제어: [0-9]{4,}를 통해 1000 이상의 모든 숫자를 효율적으로 필터링한다.범위 수치화: 256~999 사이의 숫자를 정규식의 대괄호 패턴으로 나누어 정의한다.경계 정의: \\b0[0-9]+를 통해 단독 '0'은 허용하되 '001'과 같.. 2026. 2. 16. [SQL/오답] 이메일 형식 검증, 정규표현식 수량자의 정밀도 제어 (LeetCode3436 Easy) 1. Problem사용자 데이터베이스에서 유효한 이메일 주소만 추출해야 한다. 유효성 기준은 네 가지다.@ 심볼이 정확히 하나 포함될 것.com으로 끝날 것@ 앞부분은 영문자, 숫자, 언더바(_)만 허용할 것@와 .com 사이의 도메인 네임은 오직 영문자로만 구성될 것단순히 패턴을 포함하는 것이 아니라, 시작(^)과 끝($)을 명확히 정의하여 전체 문자열의 형식을 강제하는 것이 핵심이다.2. Solution각 구간별 제약 조건을 정규표현식으로 세분화하여 설계한다.아이디 구간(^[a-zA-Z0-9_]+): 문자열 시작부터 @ 전까지 문자, 숫자, 언더바가 최소 1글자 이상(+) 있어야 한다.도메인 구간(@[a-zA-Z]+): @ 뒤에 영문 도메인 네임이 최소 1글자 이상(+) 이어져야 한다.마무리(\\.c.. 2026. 2. 16. [SQL/오답] 시계열 데이터의 시작과 끝점 비교: 상관 서브쿼리와 윈도우 함수 성능 최적화 (LeetCode3421 Medium) 1. Problem학생별, 과목별로 최소 2회 이상 시험을 치른 기록을 추적하여, 첫 시험 성적 대비 마지막 시험 성적이 향상된 학생 목록을 추출해야 한다. 데이터가 행(Row) 단위로 쌓여 있는 시계열 구조에서 특정 그룹의 '최초'와 '최신'이라는 두 시점의 값을 가로로 펼쳐 비교하는 로직 설계가 핵심이다.2. Solution가장 직관적인 상관 서브쿼리(Correlated Subquery) 방식과 실무에서 선호되는 윈도우 함수(Window Function) 방식 두 가지로 접근할 수 있다.[방법 A] 상관 서브쿼리를 활용한 시점 추출[방법 B] 윈도우 함수를 활용한 최적화 (MySQL 8.0+)3. Takeaway (로직 설계 및 성능 인사이트)단순히 답을 구하는 것을 넘어, 데이터의 흐름을 제어하는 .. 2026. 2. 16. 이전 1 2 3 4 5 6 ··· 15 다음