SQL 50

SQL을 활용한 뉴스레터 구독자 데이터 분석

데이터 분석 목적뉴스레터 플랫폼의 유료화 -> 메일 발송 대상 타겟팅을 통한 비용 최소화코드카타만 풀어보고 직접 데이터를 전처리하고 업로드하는 경험은 많이 해보지 않았기 때문에 SQL로 데이터 분석 시도DBeaver에 csv 파일 업로드하기localhost에 새로운 Database 생성CSV Basic 사용을 시도해 보았으나 사용할 수 있는 문법이 제한적이기 때문에 다시 MySQL을 사용하는 것으로 결정    ▶ csv 파일을 import 하면서 다양한 문제 발생날짜 형식에 '+900' 이 포함되어 DATETIME으로 인식되지 않는 경우이메일과 닉네임이 같은 열에 작성되어 있는 경우문자가 너무 긴 경우 등등..   ▶ 데이터 전처리와 csv 파일을 업로드해보는 경험은 많이 해보지 않았기 때문에 SQL문을..

SQL 2025.01.15

SQL 코드카타: 상품을 구매한 회원 비율 구하기

상품을 구매한 회원 비율 구하기USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.SELECT YEAR(SALES_DATE) AS YEAR, MONTH(SALES_DATE) AS MONTH, COUNT(DISTINCT USER_ID) AS PURCHASED_USERS, -- 2021..

SQL 2025.01.07

SQL 코드카타: 자동차 대여 기록 별 대여 금액 구하기

자동차 대여 기록 별 대여 금액 구하기CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과  CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.1. TRUCK_LIST 테이블 만들기: '트럭'인 자동차의 대여기록에 대한 테이블WITH TRUCK_LIST AS ( SELECT HS.HISTORY_ID, ..

SQL 2025.01.06

SQL 코드카타 오답: JOIN과 LEFT JOIN의 중요성 | 여러가지 JOIN 조건 부여하기 | 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

[특정 기간동안 대여 가능한 자동차들의 대여비용 구하기]CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정..

SQL 2024.12.23

SQL 코드카타 오답: WITH RECURSIVE()

입양 시각 구하기(2)보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.-- 반복문을 통한 테이블 생성WITH RECURSIVE Hours AS ( -- 베이스 케이스: 재귀의 시작점 SELECT 0 AS HOUR -- 시작값을 0으로 설정 UNION ALL -- 재귀 케이스: 이전 결과를 기반으로 반복적으로 데이터 생성 SELECT HOUR + 1 FROM Hours WHERE HOUR 없는 시간 생성 SELECT HOUR(DATETIME) AS HOUR FROM..

SQL 2024.12.20

QCC 2회차: DISTINCT | <> | CASE WHEN | DATE()

1.  이메일 프로모션 캠페인 동의한 고객 수Person_Person테이블 사용이메일 프로모션에 동의한 고객해당 고객들 중 개인(소매) 고객의 수-- 내가 작성한 코드 수정-- 고객의 수를 구해야 하기 때문에 DISTINCT 해줘야함-- EmailPromotion = 1 OR 2는 xSELECT COUNT(DISTINCT BusinessEntityID) customer_countFROM Person_PersonWHERE (EmailPromotion = 1 OR EmailPromotion = 2) AND PersonType = 'IN';-- 정답-- 0: 0이 아닌SELECT COUNT(DISTINCT BusinessEntityID) customer_countFROM Person_PersonWHERE (E..

SQL 2024.12.20

SQL 코드카타 오답: 동일한 조건의 대상자가 여러명인 경우 | UNION ALL | NULL값 처리 | 테이블마다 컬럼명의 의미가 다른 경우

[그룹별 조건에 맞는 식당 목록 출력하기]MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬해주세요.-- 리뷰를 가장 많이 작성한 회원이 1명인 경우SELECT M.MEMBER_NAME, R.REVIEW_TEXT, DATE_FORMAT(R.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATEFROM MEMBER_PROFILE MJOIN REST_REVIEW R ON M.MEMBER_ID = R.MEMBER_IDWHERE M.MEM..

SQL 2024.12.18

SQL 코드카타 오답: WHERE에서 두 가지 조건 부여하기 | SUM

[저자 별 카테고리 별 매출액 집계하기]2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요.결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요.SELECT A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY, SUM(B.PRICE * S.SALES) TOTAL_SALES -- SUM을 해줘야 합계를 구할 수 있음FROM BOOK BJOIN AUTHOR A ON B.AUTHOR_ID = A.AUTHOR..

SQL 2024.12.17

QCC 1회차: WINDOW 함수 | RANK | 상관 서브쿼리 | 2번 JOIN하기 | 우선순위 부여

전년도 GNP가 없거나 전년 대비 GNP가 감소한 국가 중 인구가 10,000,000명 이상인 국가의 수-- 내가 작성한 쿼리-- 문제를 잘 읽자..!SELECT GNP, GNPOld, Population FROM (SELECT GNP, GNPOld, PopulationFROM countryWHERE GNPOld IS NULL OR GNP = 10000000;-- 정답-- 숫자에 , 적으면 안됨....!-- or 구문이 먼저 실행될 수 있도록 ()를 삽입해주면 위 쿼리처럼 서브쿼리를 쓸 필요xSELECT COUNT(DISTINCT code) AS country_countFROM countryWHERE (GNP - GNPOld = 10000000; -- 34 각 대륙에서 가장 인구가 많은 도시의 CityN..

SQL 2024.12.13