SQL(12)
-
쿼리가 스파게티가 됐다면? 복잡한 로직을 레고처럼 조립하는 CTE와 서브쿼리 (SQL 독학 #12)
지금까지는 JOIN을 이용해 테이블을 연결하거나, GROUP BY로 통계를 내는 '단편적인' 기술들을 배웠다.하지만 현업의 비즈니스 질문은 그리 단순하지 않다."평균 상영 시간보다 긴 영화만 찾아줘.""매출 상위 5개 장르의 총수익을 뽑아줘."이런 질문을 받으면 멘붕이 온다. 평균을 구하는 쿼리도 짜야 하고, 그걸 다시 필터링하는 쿼리도 짜야 하기 때문이다.쿼리 안에 쿼리를 넣어야 하는 순간, 코드는 스파게티처럼 꼬이기 시작한다. 🤯오늘은 이런 복잡한 로직을 깔끔하게 해결해 주는 서브쿼리(Subquery)와, 가독성의 끝판왕 CTE(WITH문)를 실습했다. 1. 쿼리 안에 쿼리 넣기 (서브쿼리)가장 먼저 부딪힌 문제는 "평균 상영 시간보다 긴 영화 찾기"였다.WHERE length > AVG(lengt..
2025.12.28 -
엑셀 VLOOKUP 지옥 탈출! SQL JOIN으로 흩어진 데이터 1초 만에 합치기
엑셀 작업을 하다 보면 데이터가 여러 시트에 흩어져 있는 경우가 많다.'주문 내역'에는 상품 ID만 있고, 진짜 '상품명'을 보려면 '상품 목록' 시트를 찾아봐야 하는 식이다.이때 쓰는 게 그 유명한 VLOOKUP 함수인데, 데이터가 많아지면 엑셀이 엄청나게 느려지고 #N/A 에러가 뜨기 일쑤다."아, 이거 그냥 한 표에 다 합쳐져 있으면 안 되나?" 🤯오늘은 SQL의 꽃이자 엑셀 VLOOKUP의 완벽한 상위 호환인 JOIN(테이블 합치기)을 실습했다.흩어져 있는 정보들을 레고 블록처럼 딱딱 조립하는 쾌감이 있었다. 1. 연결고리(Key) 찾기: 조립의 기초테이블을 합치려면 두 테이블이 공통으로 가지고 있는 '연결고리'가 필요하다.영화 정보가 담긴 film 테이블과 언어 정보가 담긴 language 테..
2025.12.27 -
"누가 진짜 VIP인가?" SQL로 1분 만에 고객 등급 산정 시스템 만들기 (CASE WHEN)
쇼핑몰이나 서비스를 운영하다 보면 "모든 고객이 다 똑같지는 않다"는 걸 깨닫게 된다.파레토의 법칙처럼, 상위 20%의 고객이 매출의 80%를 책임지는 경우가 많기 때문이다.사장님이 "이번 연말 선물 보낼 VIP 명단 좀 뽑아줘. 기준은 200달러 이상 구매한 사람이야."라고 했을 때,엑셀로 데이터를 내려받아 IF 함수를 수천 번 복사-붙여넣기 하고 있을 수는 없다.오늘은 SQL의 조건문인 CASE WHEN을 사용하여, 매출액에 따라 고객에게 자동으로 등급(VIP, Silver, Bronze)을 부여하는 시스템을 만들어 보았다. 1. 누가 얼마 썼는지 확인하기 (GROUP BY 복습)등급을 매기려면 먼저 고객별로 '총 얼마를 썼는지' 집계해야 한다.지난 시간에 배운 GROUP BY를 활용해 고객 ID(c..
2025.12.26 -
머신러닝의 8할은 전처리? SQL로 지저분한 데이터 예쁘게 다듬기 (문자열/날짜 함수)
데이터 분석이나 머신러닝을 공부하다 보면 "업무 시간의 80%는 데이터 전처리(Preprocessing)에 쓴다"는 말을 귀에 딱지가 앉도록 듣는다.현업의 데이터는 교과서처럼 깔끔하지 않기 때문이다."이름과 성이 떨어져 있어서 합쳐야 해요", "이메일 대소문자가 섞여 있어요", "날짜에서 '월(Month)'만 뽑고 싶어요"...이런 요구사항을 엑셀로 처리하다간 날이 샌다.오늘은 SQL의 문자열 함수와 날짜 함수를 이용해, 원본 데이터(Raw Data)를 분석하기 좋은 형태로 가공하는 법을 실습했다. 데이터 분석가의 '칼과 가위' 같은 도구들이다.1. 떨어진 이름 합치기 (|| 연산자)고객 테이블(customer)을 열어보니 성(last_name)과 이름(first_name)이 따로국밥이다.분석할 때는 '..
2025.12.15 -
"김 대리가 이달의 판매왕?" 엑셀 피벗 없이 SQL로 1초 만에 실적 분석하기 (GROUP BY)
지난 포스팅에서는 SUM, AVG 같은 함수로 전체 데이터를 뭉뚱그려 요약하는 법을 배웠다.하지만 사장님은 "전체 매출"만 궁금해하지 않는다."그래서, 강남점이 잘했어, 홍대점이 잘했어?", "어떤 영화 장르가 돈이 돼?"이런 질문에 답하려면 데이터를 "끼리끼리 묶어서(Grouping)" 비교해야 한다.엑셀에서는 '피벗 테이블'을 써야 하지만, 데이터가 많으면 역시나 버벅거린다.오늘은 SQL의 꽃이자 분석의 핵심인 GROUP BY와 HAVING을 실습했다.1. 등급별로 쪼개서 세기 (GROUP BY)"영화 등급(G, PG, R 등)별로 영화가 몇 편씩 있을까?"전체 개수가 아니라, 등급이라는 범주(Category)별로 통계를 내고 싶을 때 GROUP BY를 쓴다.SELECT rating, COUNT(*)..
2025.12.14 -
사장님이 "총매출 얼마야?" 물으실 때, 엑셀 켜지 않고 1초 만에 대답하는 법 (SQL 집계함수)
지난 시간까지는 SELECT *를 통해 데이터를 "있는 그대로" 조회하는 법을 익혔다.하지만 실무에서 상사가 원하는 건 수만 줄의 원본 데이터가 아니다."그래서, 이번 달 총매출이 얼만데?", "지금 우리 고객이 몇 명이야?"이런 질문을 받았을 때, 10만 줄짜리 엑셀 파일을 열고 SUM 함수를 드래그하다가 컴퓨터가 멈추는 식은땀 나는 상황... 상상만 해도 끔찍하다. 😱오늘은 이런 상황을 타개할 SQL의 강력한 무기, 집계 함수(Aggregation Function)를 실습했다.단 한 줄의 코드로 수만 건의 데이터를 0.01초 만에 요약하는 마법 같은 경험이었다.1. "고객이 몇 명이야?" (COUNT)가장 기본이다. customer 테이블을 다 열어볼 필요 없이, "몇 명인지" 숫자만 딱 알고 싶을..
2025.12.14