[solvesql_Lv2] 다음날 서울숲의 미세먼지 농도 나쁨
·
코딩 테스트/02. SQL
1. 풀이 방법 (DATE_ADD)SELECT dt1.measured_at AS today, dt2.measured_at AS next_day, dt1.pm10 AS pm10, dt2.pm10 AS next_pm10FROM measurements as dt1JOIN measurements as dt2ON dt2.measured_at = DATE_ADD(dt1.measured_at, INTERVAL 1 DAY)WHERE dt1.pm10 2. POINT해당 문제에서는 SELF JOIN을 사용해서 문제를 풀었습니다JOIN의 조건인 ON에서 DATE_ADD를 사용했는데요ON dt2.measured_at = DATE_ADD(dt1.measured_at, INTERVAL 1 DAY) --dt1의 다음날..
[solvesql]MySQL_1 (Lv_2)
·
코딩 테스트/02. SQL
1. 쇼핑몰의 일일 매출액SELECT DATE(o.order_purchase_timestamp) AS dt, ROUND(SUM(p.payment_value), 2) AS revenue_dailyFROM olist_orders_dataset AS oJOIN olist_order_payments_dataset AS p USING (order_id)WHERE o.order_purchase_timestamp >= '2018-01-01' GROUP BY dtORDER BY dt;POINT!USING : 두 테이블에 완전히 동일한 컬럼명이 있고, 그 컬럼으로만 조인할 때 간결하게 사용 가능 ON을 쓰면 결과 테이블에 o.order_id와 p.order_id 두 컬럼이 둘 다 남는다USING을 쓰면 orde..
[프로그래머스]Oracle SQL_7(Lv4)
·
코딩 테스트/02. SQL
문제 : 자동차 대여 기록별 대여 금액 구하기https://school.programmers.co.kr/learn/courses/30/lessons/151141?language=oracle 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr WITH TRUCK AS ( SELECT H.HISTORY_ID, H.CAR_ID, I.CAR_TYPE, I.DAILY_FEE, H.START_DATE, H.END_DATE, H.END_DATE - H.START_DATE + 1 AS RENT_DAY, (CASE ..
[프로그래머스]Oracle SQL_6(Lv4)/UNION ALL과 CONNECT BY
·
코딩 테스트/02. SQL
1. 오프라인/온라인 판매 데이터 통합하기https://school.programmers.co.kr/learn/courses/30/lessons/131537?language=oracleWITH JOIN_TABLE AS ( SELECT USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE FROM ONLINE_SALE UNION ALL SELECT ..
[프로그래머스]Oracle SQL_5(Lv4)
·
코딩 테스트/02. SQL
1. 주문량이 많은 아이스크림 조회하기https://school.programmers.co.kr/learn/courses/30/lessons/133027?language=oracle방법1) JOIN을 활용한 풀이 SELECT H.FLAVORFROM (SELECT FLAVOR, SUM(TOTAL_ORDER) AS HALF_ORDER FROM FIRST_HALF GROUP BY FLAVOR) H JOIN (SELECT FLAVOR, SUM(TOTAL_ORDER) AS JULY_ORDER FROM JULY GROUP BY FLAVOR) J ON H.FLAVOR = J.FLAVORORDER BY..
[프로그래머스]Oracle SQL_4(Lv4)
·
코딩 테스트/02. SQL
1. 년,월, 성별 별 상품 구매 회원 수 구하기https://school.programmers.co.kr/learn/courses/30/lessons/131532?language=oracleSELECT EXTRACT(YEAR FROM S.SALES_DATE) AS YEAR, EXTRACT(MONTH FROM S.SALES_DATE) AS MONTH, I.GENDER, COUNT(DISTINCT (S.USER_ID)) AS USERSFROM ONLINE_SALE S JOIN USER_INFO I ON S.USER_ID = I.USER_IDWHERE I.GENDER IS NOT NULLGROUP BY EXTRACT(YEAR FROM S.SALES_DATE), EXTRACT(MON..
카디널리티를 적용한 ERM 초안 수정
·
데이터 분석/06. 데이터 모델링
1. 1:1 관계체크항목설명이유1. 어떤 테이블에 FK를 넣을지 결정했는가?1:1 관계에서는 한쪽 또는 양쪽에 Foreign Key(FK)를 넣어야 함잘못 넣으면 NULL 값이 많아져 데이터 낭비 발생2. 필수 관계인지 선택 관계인지 파악했는가?(1)필수: 반드시 값이 있어야 함 → FK를 필수 엔터티에 넣음 (2)선택: 없어도 됨 → 선택 엔터티에 넣음NULL 발생 여부와 모델의 정확성을 결정3. NULL 최소화를 고려했는가?FK를 어디에 넣을지 판단 시 NULL이 생기지 않는 방향으로 설계NULL은 데이터 해석 혼란과 공간 낭비 초래4. FK 조회 방향 확인FK가 있는 테이블에서 다른 테이블의 데이터를 정확히 조회 가능한지 확인FK 설계 오류 시 JOIN 시 혼동 발생주의할 점항목 1) Foreign..
카디널리티 관계 유형
·
데이터 분석/06. 데이터 모델링
카디널리티란?1. 개념카디널리티는 한 엔터티(Entity)의 한 개체가 다른 엔터티의 몇 개체와 연결될 수 있는지를 나타내는 관계의 수.→ 즉, 두 엔터티가 어떤 방식으로 연결되는지를 보여준다.2. 카디널리티의 주요 종류(1) 1:1 (일대일)두 엔터티 간 각 개체가 서로 하나씩만 연결될 수 있는 관계예시:한 시민 ↔ 하나의 주민등록증특징: 주로 식별 정보나 고유 관계에서 사용예: 사용자 프로필, 여권, 차량등록증 등 (2) 1:N (일대다)A 엔터티의 하나가 B 엔터티의 여러 개와 연결될 수 있음반대로, B 엔터티의 하나는 A 엔터티 하나에만 연결됨예시:한 명의 선생님 ↔ 여러 수업단, 한 수업은 한 명의 선생님만 담당특징: 가장 흔히 등장하는 관계예: 고객 ↔ 주문, 카테고리 ↔ 상품(3) M:N (..
식별자의 종류와 주식별자의 특성
·
데이터 분석/06. 데이터 모델링
📌 식별자(Identifier)란?식별자는 데이터베이스 안에 있는 정보들을 서로 구분할 수 있도록 해주는 고유한 태그나 이름표와 같다.즉, 각 데이터를 명확하게 식별하기 위해 사용된다.1. 식별자의 종류식별자는 대표성, 생성 여부, 속성 수, 대체 여부에 따라 다음과 같이 분류분류 기준종류설명예시대표성주식별자 (Primary Identifier)각 엔터티를 유일하게 구분하는 가장 중요한 속성학생 관리 시스템 → 학번 보조식별자 (Secondary Identifier)주식별자 외에 추가로 엔터티를 구분할 수 있는 속성학생 관리 시스템 → 이름생성 여부내부 식별자 (Internal Identifier)엔터티 내부에서만 의미를 가지는 식별자직원 → 사원번호 외부 식별자 (External Identifier)..
Attribute 후보에 대한 예외 경우
·
데이터 분석/06. 데이터 모델링
데이터 모델링을 할 때, 비즈니스 룰에서 Attribute를 찾아내는 과정이 있습니다.일반적으로 "하나의 값으로 표현할 수 있는 명사"는 Attribute 후보로 봅니다.하지만, 이 규칙에는 예외가 있습니다.바로 하나의 값으로 표현할 수 있는 명사라도, Entity로 만들어야 하는 경우입니다.1. Attribute가 아닌 Entity로 만들어야 하는 경우조건: 동일한 속성을 한 Entity 안에서 여러 개 저장해야 할 때예를 들어,"유저는 여러 개의 주소를 가질 수 있다."라고 가정해봅시다.이 상황에서 주소를 단순히 User 테이블의 Attribute로 넣으면 어떤 문제가 생길까요?2. 잘못된 모델링이 초래하는 문제점문제 1. Null 값 증가유저가 주소를 여러 개 가질 수 있다면, 주소를 address..