newChobo
Published 2023. 3. 13. 21:15
SQLD 02 자격증/SQLD

1. https://school.programmers.co.kr/learn/courses/30/lessons/151141

<sql />
--ORACLE /* CAR_RENTAL_COMPANY_CAR CAR_RENTAL_COMPANY_RENTAL_HISTORY CAR_RENTAL_COMPANY_DISCOUNT_PLAN 자동차 종류가 트럭인 대여기록에서 기록별로 금액 구해 대여기록 ID와 대여금액 리스트 출력 정렬은 대여금액기준 내림차순, 대여기록ID 내림차순 */ SELECT DISTINCT b.HISTORY_ID, (CASE WHEN b.END_DATE - b.START_DATE + 1 >= 90 THEN a.DAILY_FEE * (b.END_DATE - b.START_DATE + 1) * ((100-( SELECT DISCOUNT_RATE FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE CAR_TYPE = '트럭' AND DURATION_TYPE = '90일 이상' ))/100) WHEN b.END_DATE - b.START_DATE + 1 >= 30 THEN a.DAILY_FEE * (b.END_DATE - b.START_DATE + 1) * ((100-( SELECT DISCOUNT_RATE FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE CAR_TYPE = '트럭' AND DURATION_TYPE = '30일 이상' ))/100) WHEN b.END_DATE - b.START_DATE + 1 >= 7 THEN a.DAILY_FEE * (b.END_DATE - b.START_DATE + 1) * ((100-( SELECT DISCOUNT_RATE FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE CAR_TYPE = '트럭' AND DURATION_TYPE = '7일 이상' ))/100) ELSE a.DAILY_FEE * (b.END_DATE - b.START_DATE + 1) END ) AS FEE FROM CAR_RENTAL_COMPANY_CAR a JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY b ON a.CAR_ID = b.CAR_ID JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN c ON a.CAR_TYPE = c.CAR_TYPE WHERE a.CAR_TYPE = '트럭' ORDER BY FEE DESC, HISTORY_ID DESC

 

2. https://school.programmers.co.kr/learn/courses/30/lessons/151139

이건 다시 볼 필요 있을듯. 위도 더 좋은 코드가 있었겠지만, 이건 혼자 푸는걸 사실상 실패함...

<sql />
/* Oracle TABLE : CAR_RENTAL_COMPANY_RENTAL_HISTORY 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차만 기간동안 ID별 총 대여 횟수 정렬은 월 기준 오름차순, 자동차 ID 내림차순 대여횟수가 0이면 결과에서 제외 */ /* --기간동안 대여 횟수가 5회 이상인 차량들을 골라내는 쿼리 SELECT CAR_ID, COUNT(CAR_ID) FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE TO_DATE('2022-08-01', 'YYYY-MM-DD') <= START_DATE AND TO_DATE('2022-10-31', 'YYYY-MM-DD') >= START_DATE GROUP BY CAR_ID HAVING COUNT(CAR_ID) >= 5 ORDER BY CAR_ID DESC */ /* --실패. 원인 파악중... SELECT MONTH, CAR_ID, (COUNT(*)) AS RECORDS FROM ( SELECT TO_NUMBER(TO_CHAR(START_DATE, 'MM')) as MONTH, CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE CAR_ID IN ( SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE TO_DATE('2022-08-01', 'YYYY-MM-DD') <= START_DATE AND TO_DATE('2022-11-01', 'YYYY-MM-DD') > START_DATE GROUP BY CAR_ID HAVING COUNT(CAR_ID) >= 5 ) AND TO_CHAR(START_DATE, 'YYYY') = '2022' ) a GROUP BY MONTH, CAR_ID HAVING COUNT(*) > 0 ORDER BY MONTH ASC, CAR_ID DESC */ SELECT MONTH, CAR_ID, RECORDS FROM ( SELECT MONTH, CAR_ID, COUNT(CAR_ID) OVER (PARTITION BY MONTH, CAR_ID) AS RECORDS, COUNT(CAR_ID) OVER (PARTITION BY CAR_ID) AS ALL_RECORDS FROM ( SELECT HISTORY_ID, TO_NUMBER(LTRIM(TO_CHAR(START_DATE,'MM'),'0')) AS MONTH, CAR_ID, START_DATE FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE >= TO_DATE('20220801','YYYY-MM-DD') AND START_DATE < TO_DATE('20221101','YYYY-MM-DD') ) ) WHERE ALL_RECORDS >= 5 GROUP BY MONTH, CAR_ID, RECORDS HAVING COUNT(*) > 0 -- 수정된 부분 ORDER BY MONTH, CAR_ID DESC;

 

3. https://school.programmers.co.kr/learn/courses/30/lessons/151138

<sql />
/* CAR_RENTAL_COMPANY_RENTAL_HISTORY 대여시작일이 2022-09에 속하면서, 대여기간이 30일 이상이면 장기 대여 아니면 단기 대여 로 표시하는 컬럼 추가해 출력 대여기록 ID 기준으로 내림차순 정렬 */ SELECT HISTORY_ID, CAR_ID, TO_CHAR(START_DATE, 'YYYY-MM-DD') AS START_DATE, TO_CHAR(END_DATE, 'YYYY-MM-DD') AS END_DATE, (CASE WHEN END_DATE - START_DATE + 1 >= 30 THEN '장기 대여' ELSE '단기 대여' END ) AS RENT_TYPE FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE TO_CHAR(START_DATE, 'YYYY-MM') = '2022-09' ORDER BY HISTORY_ID DESC;

 

4. https://school.programmers.co.kr/learn/courses/30/lessons/151137

<sql />
/* CAR_RENTAL_COMPANY_CAR 옵션중에 통풍시트, 열선시트, 가죽시트 중에 하나 이상의 옵션을 포함한 차량이 몇대인가? */ SELECT CAR_TYPE, COUNT(CAR_TYPE) AS CARS FROM CAR_RENTAL_COMPANY_CAR WHERE OPTIONS LIKE '%통풍시트%' OR OPTIONS LIKE '%열선시트%' OR OPTIONS LIKE '%가죽시트%' GROUP BY CAR_TYPE ORDER BY CAR_TYPE ASC;

 

5. https://school.programmers.co.kr/learn/courses/30/lessons/151136

<sql />
/* CAR_RENTAL_COMPANY_CAR 자동차 종류가 'SUV'인 자동차들의 평균 일일 대여 요금을 출력하는 SQL 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림 컬럼명은 AVERAGE_FEE */ SELECT ROUND(AVG(DAILY_FEE), 0) AS AVERAGE_FEE FROM CAR_RENTAL_COMPANY_CAR WHERE CAR_TYPE = 'SUV' GROUP BY CAR_TYPE

 

6. https://school.programmers.co.kr/learn/courses/30/lessons/144856

<sql />
/* BOOK, AUTHOR, BOOK_SALES 2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요. */ SELECT AUTHOR_ID, (SELECT AUTHOR_NAME FROM AUTHOR WHERE AUTHOR_ID = a.AUTHOR_ID) AS AUTHOR_NAME, CATEGORY, SUM(TOTAL_SALES) FROM ( SELECT a.AUTHOR_ID, b.AUTHOR_NAME, a.CATEGORY, (a.PRICE * c.SALES) AS TOTAL_SALES FROM BOOK a JOIN AUTHOR b on a.AUTHOR_ID = b.AUTHOR_ID JOIN BOOK_SALES c on a.BOOK_ID = c.BOOK_ID WHERE TO_CHAR(c.SALES_DATE, 'YYYY-MM') = '2022-01' ) a GROUP BY AUTHOR_ID, CATEGORY ORDER BY AUTHOR_ID ASC, CATEGORY DESC; /* BOOK, AUTHOR, BOOK_SALES 2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요. */ SELECT a.AUTHOR_ID, (SELECT AUTHOR_NAME FROM AUTHOR WHERE AUTHOR_ID = a.AUTHOR_ID) AS AUTHOR_NAME, a.CATEGORY, SUM(a.PRICE * c.SALES) AS TOTAL_SALES FROM BOOK a JOIN BOOK_SALES c on a.BOOK_ID = c.BOOK_ID WHERE TO_CHAR(c.SALES_DATE, 'YYYY-MM') = '2022-01' GROUP BY AUTHOR_ID, CATEGORY ORDER BY AUTHOR_ID ASC, CATEGORY DESC

7. https://school.programmers.co.kr/learn/courses/30/lessons/144855

<sql />
/* BOOK BOOK_SALES 2022년 1월의 카테고리 별 도서 판매량을 합산하고, 카테고리(CATEGORY), 총 판매량(TOTAL_SALES) 리스트를 출력하는 SQL문 결과는 카테고리명을 기준으로 오름차순 */ SELECT CATEGORY, SUM(b.SALES) AS TOTAL_SALES FROM BOOK a JOIN BOOK_SALES b ON a.BOOK_ID = b.BOOK_ID WHERE TO_CHAR(b.SALES_DATE, 'YYYY-MM') = '2022-01' GROUP BY a.CATEGORY ORDER BY a.CATEGORY ASC;

 

8. https://school.programmers.co.kr/learn/courses/30/lessons/144854

<sql />
/* BOOK AUTHOR '경제' 카테고리에 속하는 도서들의 도서 ID(BOOK_ID), 저자명(AUTHOR_NAME), 출판일(PUBLISHED_DATE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 출판일을 기준으로 오름차순 정렬해주세요. */ SELECT BOOK_ID, (SELECT AUTHOR_NAME FROM AUTHOR WHERE AUTHOR_ID = BOOK.AUTHOR_ID) AS AUTHOR_NAME, TO_CHAR(PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE FROM BOOK WHERE CATEGORY = '경제' ORDER BY PUBLISHED_DATE ASC;

 

9. https://school.programmers.co.kr/learn/courses/30/lessons/144853

<sql />
/* BOOK BOOK 테이블에서 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트 도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력하는 SQL 결과는 출판일을 기준으로 오름차순 */ SELECT BOOK_ID, TO_CHAR(PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE FROM BOOK WHERE TO_CHAR(PUBLISHED_DATE, 'YYYY') = '2021' AND CATEGORY = '인문' ORDER BY PUBLISHED_DATE ASC;

 

10. https://school.programmers.co.kr/learn/courses/30/lessons/133027

<sql />
/* FIRST_HALF JULY 7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 더한 값이 큰 순서대로 상위 3개의 맛을 조회하는 SQL 문을 작성해주세요. SHIPMENT_ID는 JULY테이블의 SHIPMENT_ID의 외래 키입니다. */ SELECT FLAVOR FROM ( SELECT FLAVOR, ROWNUM FROM ( SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOTAL_ORDER FROM ( SELECT SHIPMENT_ID, FLAVOR, TOTAL_ORDER FROM FIRST_HALF UNION ALL SELECT SHIPMENT_ID, FLAVOR, TOTAL_ORDER FROM JULY ) c GROUP BY FLAVOR ORDER BY TOTAL_ORDER DESC ) b ) a WHERE ROWNUM <= 3; --ROWNUM 3개를 뽑지만, DESC 해야하는것을 잊으면 안됨.

 

'자격증 > SQLD' 카테고리의 다른 글

SQLD 04  (0) 2023.03.15
SQLD 03  (0) 2023.03.14
SQLD 01  (0) 2023.03.12
정리본 읽기  (0) 2023.03.08
NL JOIN? Hash JOIN? anti? semi? nested loop?  (0) 2023.03.06
profile

newChobo

@새로운뉴비

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!