목록Programming Skill/SQL (18)
Data Blog
1. 가장 최근에 주문한 날짜는?? 위 질문을 듣고 바로 떠오른 풀이법은 첫 번째 방법이다. 그러나 데이터 타입이 날짜형일 경우에는 MIN 함수와 MAX 함수를 사용하여 가장 오래된 날짜와 가장 최근 날짜를 구할 수 있다.-- 방법 1) LIMITSELECT date FROM tableORDER BY date DESCLIMIT 1;-- 방법 2) 집계 함수SELECT MAX(date) AS max_date , MIN(date) AS min_dateFROM records; 2. 날짜형 데이터 타입 필터링 날짜형 데이터 타입은 다음과 같다.DATETIME : 날짜와 시간을 저장하는 데이터 타입 (예: 2022-10-01 18:25:30)DATE : 날짜를 저장하는 데이터 타입 (예: 2022-10-0..
cf. 윈도 함수에 대한 보다 자세한 설명은 아래에 첨부한 포스팅을 참고해 주시기 바랍니다. (먼저 읽어보는 것을 추천합니다!) Window Function으로 집계와 순위 다루기1. 집약 전 + 집약 함수 동시에 다루기 (by Window Function) Window Function을 사용하면 원래 테이블의 값과 집계 함수의 결괏값을 쉽고 효율적으로 조합할 수 있다. 즉, 테이블 전체의 평균값과 user_id별xixinn.tistory.com ABC 분석이란 매출 중요도를 기준으로 상품을 나누는 분석 기법으로, 매출이 높은 카테고리 순서에 따라 분류한다. 이 방법은 매출이 높은 카테고리 순서로 정렬한 후, 매출 합계를 기반으로 카테고리별 매출 비율과 해당 시점까지의 누계를 계산한다. 이후, 사용자의 ..
1. Category별 매출 & 소계 대분류(category)와 소분류(sub_category), 그리고 가격을 조합하여 데이터의 특징을 추출해 보자. 여기서 말하는 '조합'이란 대분류와 소분류 각각의 경우의 수를 모두 고려한 것을 의미한다. 예를 들어, cloth 테이블에서 카테고리별 매출과 소계를 동시에 추출한다면, 다음과 같은 형식이 될 수 있다. 방법 1) CTECTE를 활용하여 카테고리별 매출과 소계를 동시에 추출하는 쿼리는 다음과 같다. 소분류 매출 집계, 대분류 매출 집계, 전체 매출 집계(계층별로 집계한 결과)를 UNION ALL 연산자를 사용해 묶어주면 끝이다. (합쳐지는 SELECT 문의 열과 데이터 타입이 일치해야 하는 점은 굳이 언급하지 않아도 알 것이다.) CTE는 코드의 가독성을..
1. Z차트란?Z차트에 대한 보다 자세한 설명은 아래에 첨부한 포스팅을 참고해 주시기 바랍니다. (먼저 읽어보는 것을 추천합니다!) Z차트1. 개념 Z차트는 월 단위 매출, 매출 누계, 그리고 이동 합계의 세 가지 데이터를 차트 형태로 표현한 것이다. 이 차트는 데이터의 단기적 추이인 매출 누계를 통해 최근의 매출 흐름을 한눈에 파xixinn.tistory.com 2. 월단위 매출 집계 여러 개의 새로운 테이블을 WITH 구문 안에 쉼표를 사용해 만들고, 연도와 월로 그룹화하여 월단위 매출을 구할 수 있다.WITH purchase_2122 AS ( SELECT dt , SUBSTR(dt, 1, 4) AS year , SUBSTR(dt, 6, 2) AS month ..
cf. 윈도 함수에 대한 보다 자세한 설명은 아래에 첨부한 포스팅을 참고해 주시기 바랍니다. (먼저 읽어보는 것을 추천합니다!) Window Function으로 집계와 순위 다루기1. 집약 전 + 집약 함수 동시에 다루기 (by Window Function) Window Function을 사용하면 원래 테이블의 값과 집계 함수의 결괏값을 쉽고 효율적으로 조합할 수 있다. 즉, 테이블 전체의 평균값과 user_id별xixinn.tistory.com 1. 월별 매출 누계 purchase 테이블(2022-11-01 ~ 2022-11-10)은 날짜별로 2개의 데이터가 존재하는 테이블이다. 이 테이블에서 날짜별 purchase_amount의 합계를 구하고, 윈도 함수를 사용하여 현재 행을 기준으로 이전 7일간의 ..
1. Pivoting 피벗(Pivot)은 행으로 나열된 데이터를 열로 변환하여 더 쉽게 이해할 수 있도록 가공하는 과정이다. 시간이 지나면서 쌓인 데이터는 세로로 긴 형태를 띠어 가독성이 떨어질 수 있는데 이때, 피벗을 활용하면 대규모 정보를 가진 데이터의 가독성을 높일 수 있다. 2. 한 달 전 자료 한 달 이내에 구매 기록이 있으면 1점을, 그렇지 않으면 0점을 부여해 보자. (오늘은 2024년 10월 5일)가장 먼저 떠오른 생각은 DATEDIFF 함수와 CURRENT_DATE() 함수를 사용하여 구매 날짜와 현재 날짜의 차이가 30일이 되는 날짜를 구하는 것이었다. (벌써 복잡해짐,,) 이제는 기한을 계산하라는 요청에 대해 날짜 함수를 사용하는 것이 항상 정답이라는 고정관념을 버리고 똑똑한 우리의..
1. CTE를 활용한 테이블 생성 CTE는 자주 사용되는 테이블을 일시적으로 새로운 이름으로 저장해 재사용할 수 있으며, 이를 통해 코드의 가독성을 크게 높이는 장점이 있다. 이전 포스팅에서는 이미 존재하는 DB 테이블을 변형하여 CTE를 활용해 일시적으로 테이블을 생성한 바 있다. 이번 포스팅에서는 CTE를 사용해 유사 테이블을 만들어보자. 입력할 데이터를 SELECT AS , AS , ... 형태로 나열한 후, 중복된 값을 모두 포함하는 UNION ALL로 연결하면 유사 테이블이 완성된다.WITH class_info AS ( SELECT 1 AS class_id, 'Math' AS class_name UNION ALL SELECT 2 AS class_id, 'English' AS cla..
1. 조건 만족 여부를 0과 1로 표현 값의 존재 유무나 특정 조건의 만족 여부를 0과 1로 나타내는 방법은 앞선 포스팅에서 많이 다뤘듯이, CASE WHEN 구문을 사용할 수 있다. 이와 유사하게 SIGN 함수를 활용하여 조건의 만족 여부를 0과 1로 표현할 수 있다.-- user_id별 card_number 등록 이력 여부와 구매 이력의 유무SELECT c.user_id , c.card_number , CASE WHEN c.card_number IS NOT NULL THEN 1 ELSE 0 END AS card_ox -- 신용카드 등록 이력 유무 , COUNT(p.purchase_id) AS purchase_count -- 구매 횟수 (0 이상의 정수) , SIGN(..