SQL (10) 썸네일형 리스트형 SQL로 Pivot Table 만들기(+키워드/함수의 역할) Pivot Table 2개 이상의 기준으로 데이터를 집계하고, 행/열 형태로 재배열하여 보여주는 것(엑셀 피벗 테이블이랑 동일 개념)왜 사용하는가?일반 집계의 경우, 세로로 길게 나옴(원하는 값 확인 불편)피벗 테이블의 경우, 가로로 펼쳐짐(비교 쉬움)구조 이해행(Row) → 집계 기준 (예: 음식점, 나이)열(Column) → 구분 컬럼 (예: 시간, 성별)값(Value) → 집계 데이터 (예: 주문 수)Pivot Table 만드는 2단계 구조Step 1. 집계 테이블 만들기GROUP BY로 기본 데이터 만들기Step 2. Pivot 형태로 변환IF + MAX로 컬럼 펼치기-- 실습 1. 음식점별 시간별 주문건수 Pivot-- 1단계 : 집계SELECT a.restaurant_name, SU.. 조회한 데이터 문제가 있다면?(결측값/이상치(Outlier))+이상치 탐지 방법(IQR, Z-score) 데이터가 없을 때(결측값)의 연산 결과 변화 케이스 방법1. 없는 값을 연산에서 제외해 주기계산에 사용할 수 없는 값은 NULL로 변환하여 집계에서 제외 → 0으로 간주SQL의 집계 함수(AVG, SUM 등)는 NULL을 자동으로 제외따라서 잘못된 값을 NULL로 바꾸는 것 분석 정확도 중요 → 제외 (NULL 처리) // 예시.SELECT restaurant_name, -- 원본 평균 (문자 포함 시 문제 가능) AVG(rating) average_of_rating, -- 'Not given'은 NULL로 처리 후 평균 계산 AVG(IF(rating 'Not given', rating, NULL)) average_of_rating2FROM food_ordersGROUP.. JOIN으로 두 테이블 이상 조회하기 JOIN두 개 이상의 테이블을 공통 컬럼(키) 기준으로 결합하여 하나의 결과 테이블처럼 조회하는 SQL 연산-- 기본 문법SELECT aaaFROM table1 A JOIN table2 B ON A.key = B.key; JOIN 종류 - INNER/LEFT/RIGHT INNER JOIN (교집합) : 양쪽 모두 존재하는 데이터만 조회LEFT JOIN(왼쪽 기준) : 왼쪽 테이블은 모두 유지 + 오른쪽은 매칭되는 것만매칭 안 되면 오른쪽 컬럼은 NULLRIGHT JOIN (오른쪽 기준) : 오른쪽 테이블 기준 유지 JOIN 동작 흐름기준 테이블 선택 (FROM)JOIN으로 다른 테이블 붙임ON 조건으로 연결→ 누구를 기준으로 붙여 조회할 것인가 /*실습 1.JOIN 을 이용하여 두 개의 테이블에서 데.. Window Function - 순위 매기기(RANK() OVER), 반환 행 수 제한하기(LIMIT) 윈도우 함수(Window Function)그룹은 유지하면서, 각 행에 계산 결과를 덧붙이는 함수== 특정 기준으로 “창(window)”을 만들고 그 범위 내에서 계산한 결과를 각 행에 반환하는 함수→ 엑셀에서 원본 행은 그대로 두고, 옆 열에 순위/합계/비율을 추가하는 느낌왜 필요한가?아래와 같은 문제를 쉽게 해결(예시) :음식 타입별로 상위 3개 식당각 식당이 카테고리 내에서 차지하는 비율누적합(러닝 합계) 계산사용자별 첫 주문 / 두 번째 주문 비교기존 SQL로는 서브쿼리/조인 반복이 필요하지만, Window Function으로 한 번에 계산 가능순서 : PARTITION BY로 나누고 → ORDER BY로 정렬 → 함수 적용 -- 기본 구조window_function(argument)OVER ( .. 복잡한 연산을 서브쿼리(Subquery)로 해결하기 서브쿼리(Subquery)란?하나의 SQL 문 안에 포함된 또 다른 SELECT 쿼리중간 결과를 생성하여 바깥 쿼리에서 재사용하는 구조-- 기본 구조SELECT ...FROM ( SELECT ... FROM 테이블) 별칭; 왜 쓰는가?집계 → 조건 분리GROUP BY로 집계한 결과는 바로 WHERE/CASE에서 쓰기 어려움그래서 먼저 서브쿼리로 결과를 만든 뒤, 바깥에서 조건/분류 처리계산 단계 분리 (가독성)재사용 가능한 '임시 테이블'서브쿼리 결과는 하나의 테이블처럼 사용 가능 주의할 점별칭(alias) 필수 → 없으면 오류성능 이슈서브쿼리 많아지면 성능 저하 가능(특히 중첩 서브쿼리 주의)가독성 vs 성능단순 쿼리 → 굳이 필요 없음집계 후 조건 처리 → 서브쿼리 필수-- 예시. 음식 .. 조건에 따라 다른 연산하기(IF, CASE) IF 조건이 TURE면 값1, FALSE면 값2를 반환하는 함수2가지 결과만 처리(간단 분기/짧고 빠름)중첩 가능하지만 가독성이 떨어짐-- 기본 문법IF(조건, 참일 때 값, 거짓일 때 값) -- 삼항연산자-- 실습 1. 음식 타입을 'Korean'일 때는 '한식', 'Korean'이 아닌 경우에는 '기타'로 지정SELECT restaurant_name, cuisine_type AS "원래 음식 타입", -- 기존 음식 타입 그대로 출력 IF(cuisine_type = 'Korean', '한식', '기타') AS "음식 타입" -- 조건에 따라 한식/기타 분류FROM food_orders; .. SQL에서 시간 계산하기(YEAR, CURDATE, DATEDIFF, NOW 등) SQL에서 날짜(Date) 데이터 다루기 날짜 데이터 = 시간 정보를 담고 있는 숫자 데이터 → 단순 문자열이 아니라 연산 가능한 값SQL에서 날짜는 → 연/월/일/시/분/초 정보를 가진 데이터 타입단순 텍스트 X → 비교 가능/계산 가능/변환 가능왜 중요한가?특정 기간 데이터 조회(ex. 3월 매출)시간 흐름 분석 (월별/주별)트렌드 분석주의사항날짜는 문자열이 아님'2023-01-01' → 그냥 텍스트DATE('2023-01-01') → 날짜 타입 날짜는 분해해서 쓴다 → YEAR, MONTH 단위 분석 가능 필터링 시 포맷 주의 '%m' = '03' → 문자열 비교라서 '03' 맞춰야 함날짜 컬럼은 DATE 타입으로 저장하는 게 좋음성능 + 정확성 측면날짜 구성 요소요소의미YEAR연도MONTH월.. 문자 데이터 변경(SUBSTR, CONCAT)+GROUP BY 같이 사용 SUBSTR(문자열 자르기)문자열의 특정 위치부터 일정 길이만큼 잘라서 반환하는 함수(필요한 부분만 추출)인덱스는 1부터 시작 ★길이 생략시 → 끝까지 반환ex. “서울시 강남구” → 앞 2글자만 → “서울”-- 기본 문법SUBSTR(문자열, 시작위치, 길이) CONCAT(문자열 합치기)여러 문자열을 하나의 문자열로 결합하는 함수여러 값 한 번에 결합 가능문자열 + 컬럼 혼합 가능 ex. “서울” + “맛집” → “서울맛집”※ 가독성을 위해 별칭(AS(alias)) 사용 권장-- 기본 문법CONCAT(문자열1, 문자열2, ...) SUBSTR, CONCAT 실습 [쿼리 작성 전, 고려 사항] ① 어떤 테이블에서 어떤 데이터를 뽑을지 ② 어떤 컬럼을 이용지 ③ 어떤 조건을 지정할지 .. 이전 1 2 다음