프로젝트1 | DBeaver에서 대용량 데이터 셋(csv) IMPORT 하기 / 오류 상황 해결법
·
SQL
이번 EDA 프로젝트에서 우리팀이 선정한 데이터 셋은 kaggle의 'eCommerce Events History in Cosmetics Shop' 데이터이다. 테이블 및 컬럼은 간단하게 구성되어있지만, 유저의 이벤트 데이터셋이므로 용량이 꽤 크다. 약 100만 행/월, 5개월치 데이터 이므로 약 500만행 (2.3gb) 정도 되는 것 같다. (excel로 샘플 보려고 했으나, 필터 조차 걸 수 없었음) 이번 프로젝트는 `DBeaver` 에서 SQL로 EDA를 진행하는 프로젝트로 바로 import를 시도했는데, 몇 가지 오류사항으로 import 자체가 안되는 어려움이 있어서 해당 내용을 정리하고 공유 하고자 한다. eCommerce Events History in Cosmetics ShopThis dat..
코테 준비 | 해커 랭크 BINARY TREE NODES
·
SQL
해커랭크 Medium (Binary Tree Nodes)▶ 문제 POINT :  부모/자식간의 관계, 계층 구조를 파악하여 각각의 노드 타입 출력 [문제] [문제 조건] - BST 테이블은 바이너리 구조의 부모/자식 노드를 나타내는 테이블임 - 바이너리 트리의 계층 구조에 따라 아래와 같이 노드 타입 출력   1. Root: 부모가 없는 노드  2. Leaf : 자식이 없는 노드  3. Inner : 그 외 노드- 노드 기준 오름차순 정렬 ▶ 문제 해결 & 피드백 POINT : SELF JOIN 으로 계층 부모/자식 노드 조회 & 조건별 분류 [풀이 과정]1. 노드 타입 찾기 (with 문 서브쿼리) → 가독성을 위해 노드 타입별 WITH 문으로 빼줌`Root` : P 가 NULL 인 노드WITH Roo..
코테 준비 | 프로그래머스 재 구매 회원 구하기 / 조건 별 사용자 조회
·
SQL
Programmers 문제풀이1 (재구매가 일어난 상품과 회원 리스트 구하기)▶ 문제 POINT GROUP BY ID / HAINVG 절 집계 사용 [문제] [문제 해석 & 조건]1. 동일 회원의 재구매 상품 건수 필터링2. 회원 ID 오름차, 상품 ID 내림차 3. 회원 ID, 상품 ID 출력   ▶ 해결 POINT : GROUP BY & HAVING 절 집계 함수 사용 [풀이 과정]1.  재구매 건수USER_ID & PRDUCT_ID 기준 그룹바이 후 PK(ONLINE_SALE_ID) 로 카운팅 한 집계값이 2개 이상일 경우 필터링 ( 문제에서 NULL값 허용하지 않으니 COUNT 파라미터로 아스타 받아도 무방) 2. 정렬 기준: 내림차3. 출력 컬럼 기재SELECT USER_ID ,PRO..
실습 | 다중 컬럼 서브쿼리/ Correlated 서브쿼리/ DBeaver 에서 with문 사용 안될 때 해결 법
·
SQL
📂SQL 실전 문제풀이 ( Lv5. 예산이 가장 큰 프로젝트는? )문제1 : 각 직원이 속한 부서에서 가장 높은 월급을 받는 직원만 출력 (직원명/부서/월급 컬럼)▶ POINT.  부서별 가장 높은 월급을 받는 직원 필터링  [테이블 정보]더보기 [풀이 과정]필터링 조건이 그룹바이한 결과값을 적용해야 하므로 서브쿼리 사용해야함3가지 서브쿼리로 필터링 가능 풀이1. where 절 다중 컬럼 서브쿼리 사용부서별 가장 높은 월급을 조회하는 서브쿼리를 아우터쿼리 다중 컬럼 조건으로 필터링 SELECT name ,department ,salary FROM employeesWHERE (department,salary) IN (SELECT department -- 부서별 최고 월급자 서브쿼리로 필터링 ..
실습 | EDA / 다중 테이블 JOIN / 서브쿼리 VS 윈도우 함수
·
SQL
📂SQL 실전 문제풀이 (LV5. 가장 많이 팔린 품목은?)문제1 : 고객이 구매한 모든 제품의 총 금액을 조회하라. (고객 이름/총 구매 금액/총 주문수 컬럼 출력) ▶ POINT.  각 테이블 조인 & 고객 이름당 금액/주문수 집계  [테이블 정보]더보기[EDA]더보기3개 테이블의 관계 확인(PK 기준)  WHY? 성능 높이기 위해  조인 방식 선택#1 customers 와 orders 테이블 관계 → 주문내역이 없는 고객은 없으므로 inner join 가능 -- Q1. 주문내역이 없는 고객 있는지 (고객 & 주문내역 테이블 관계성) -- A1. 주문내역이 없는 고객 확인 -> 없음SELECT customer_id FROM customers c WHERE customer_id NOT IN (SELE..
실습 | JOIN/ GROUP BY/ 서브쿼리/ 순번 지정 윈도우 함수
·
SQL
📂SQL 실전 문제풀이 (LV4. 단골 고객 찾기)문제1 : 고객별 주문 건수와 총 주문 금액 조회 하기 (주문 안한 고객도 포함) ▶ POINT.  그룹바이 하고 집계 & 테이블 조인후 매칭 컬럼 출력    [테이블 정보][풀이 과정]고객별 집계 :  고객id 그룹바이 후 주문수 카운팅 / 주문 금액 합 집계   (users 테이블 내에서 집계 가능) 서브쿼리 : 가독성을 위해 with 문으로 뺴줌 Left join  : orders 테이블에 없는 customerID & customername 출력에 포함 (만족한 조건에 대해 orders 테이블에 있는 컬럼 추가 반환)  null 처리 : 주문내역이 없는 customer 의 주문건수/주문계 는 null 로 연결 → coalesce함수로 0으로 반환 ..
실습 | LEFT JOIN / NULL 값 처리법 / 서브쿼리 / MAX WINDOW
·
SQL
1. SQL 실전 문제풀이 ( Lv3. 이용자의 포인트 조회하기 )- 문제 : 전체 유저 ID별 토탈 포인트 출력 (user_id, email, point 컬럼) ( 단, 포인트 획득 내역이 없는 유저의 포인트값은 0으로 처리, 포인트 내림차순 정렬) - 포인트 : 두 테이블 조인 방식 확인 & NULL 값 0 으로 치환더보기TABLE 1. users  : user 테이블은 스파르타 코딩클럽에 가입한 유저들의 정보를 날짜별로 기록한 테이블. TABLE 2. point_ users : point_ users 테이블은 스파르타코딩클럽 가입 유저들의 포인트에 대한 정보를 기록한 테이블.- 풀이 과정 (문제풀이 & 피드백)더보기1. 문제풀이집계 : point_users 테이블에서 user_id 별 토탈 포인트 ..
실습 | EDA / 특정 문자 필터링 / 날짜별 평균 값 구하기
·
SQL
1. SQL 실전 문제풀이 ( Lv1. 데이터 속 김서방 찾기 )- 문제 :  '김'씨 성을 가진 유저 수 구하기더보기TABLE  : user 테이블은 스파르타 코딩클럽에 가입한 유저들의 정보를 날짜별로 기록한 테이블.user_id: 익명화된 유저들의 아이디(varchar255)created_at: 아이디 생성 날짜(timestamp)updated_at: 정보 업데이트 날짜(timestamp)name: 익명화된 유저들의 이름(varchar255)email: 이메일(varchar255)- 풀이 과정 (EDA & 문제 풀이)더보기1. EDA  user 테이블 전체 null 행/값 허용 하지 않음 (즉, 모든 컬럼의 정보를 입력해야 가입 완료)user_id 컬럼이 PK,  중복없이 id 부여 됨.  user_..
SQLD | 그룹 함수와 계층형 질의
·
SQL
1.  그룹 함수- GROUPING SETS(A,B) : A 와 B 각각을 집계- ROLLUP(A,B) : A집계/ (A,B) 집계/ 전체 집계  → 롤업 함수는 인수의 순서 고려 해야함- CUBE(A,B) : A집계/B 집계/ (A,B) 집계/ 전체 집계 GROUP BY ROLLUP (A,B) -- GROUPING SETS (A,(A,B),()) 와 동일GROUP BY CUBE (A,B) -- GROUPING SETS (A,B,(A,B),()) 와 동일-- 오답노트 --GROUP BY A, ROLLUP(B) -- A 가 그룹바이 된 상황에서 ROLLUP(B)가 들어감 -- 즉, 출력 값은 A,B,() 가 아닌 A,(A,B) 가 된다 TIP)  출력된 테이블을 주고, 어떤 그룹바이 함수를 썼는지..