SELECT
흉부외과 또는 일반외과 의사 목록 출력하기(Lv1)
문제
DOCTOR 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬해주세요.
풀이
SELECT로 의사의 이름, 의사ID, 진료과, 고용일자를 조회
여기서 HIRE_YMD는 DATE_FORMAT으로 형식 변경해주기!
WHERE문에서 원하는 진료과를 입력 WHERE MCDP_CD IN ('CS', 'GS')
ORDER BY에서 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD,'%Y-%m-%d') HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD IN ('CS', 'GS')
ORDER BY HIRE_YMD DESC, DR_NAME;
※ AND 연산자는 WHERE 구문에서 조건을 결합하는 데 사용되며, ORDER BY 구문에서는 사용되지 않음
SUM, MAX, MIN
가격이 제일 비싼 식품의 정보 출력하기(Lv2)
문제
FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회하는 SQL문을 작성해주세요.
풀이
SELECT로 모든 열들을 조회
WHERE에서 PRICE가 가장 높은 것을 알고 싶기에
PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT) 라는 서브쿼리로 조회
SELECT *
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE)
FROM FOOD_PRODUCT);
GROUP BY
조건에 맞는 사용자와 총 거래금액 조회하기(Lv4)
문제
2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요.
풀이
우선, USED_GOODS_BOARD는 B로 USED_GOODS_USER는 U로 지칭
SELECT에서 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES)을 조회하기 위해
(SELECT A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY, SUM(S.SALES * B.PRICE) AS TOTAL_SALES
FROM AUTHOR A)
JOIN을 BOOK, BOOK_SALES 모두 써야 하기 때문에 각각 B와 S로 지칭하고 중복되는 칼럼으로 A와 연결
WHERE에서 22년 1월의 도서 판매 데이터만 조회
(WHERE S.SALES_DATE >='2022-01-01' AND S.SALES_DATE < '2022-02-01')
GROUP BY에서 저자별, 카테고리별로 그룹화
ORDER BY에서 저자ID를 오름차순, 카테고리는 내림차순 정렬
SELECT A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY,
SUM(S.SALES * B.PRICE) AS TOTAL_SALES
FROM AUTHOR A
JOIN BOOK B ON B.AUTHOR_ID = A.AUTHOR_ID
JOIN BOOK_SALES S ON S.BOOK_ID = B.BOOK_ID
WHERE S.SALES_DATE >='2022-01-01'
AND S.SALES_DATE < '2022-02-01'
GROUP BY A.AUTHOR_NAME, B.CATEGORY
ORDER BY A.AUTHOR_ID ASC, B.CATEGORY DESC;
IS NULL
이름이 없는 동물의 아이디(Lv1)
문제
풀이
SELECT에서 동물ID를 조회
WHERE에서 이름이 없는 동물을 원하기에 (WHERE NAME IS NULL)
ORDER BY에서 ID를 오름차순 정렬
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID ASC;
JOIN
⭐특정 기간동안 대여 가능한 자동차들의 대여비용 구하기(lv4)
문제 설명
문제
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를 기준으로 내림차순 정렬해주세요.
풀이
SELECT에서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE)을 조회
여기서 FEE의 경우, (100-D.DISCOUNT_RATE)/100 → 할인율 적용
두 테이블을 사용해야하므로, 공통 컬럼인 CAR_TYPE으로 JOIN을 한다
WHERE에서 자동차 종류가 '세단' 또는 'SUV'
2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하려면, 끝나는 날짜가 22년 11월 1일 이상이거나 시작하는 날짜가 22년 12월 1일 미만인 날짜들이 포함되지 않게 설정!
30일간의 대여 금액이 50만원 이상 200만원 미만인 조건을 설정
(SELECT에서 FEE로 설정을 하였다고 WHERE구문에서 FEE를 사용해서는 안 됨!
SQL 실행 순서 : FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY 이기 때문!! )
ORDER BY에서 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬
SELECT C.CAR_ID,
C.CAR_TYPE,
ROUND(C.DAILY_FEE*30*(100-D.DISCOUNT_RATE)/100) AS FEE
FROM CAR_RENTAL_COMPANY_CAR C
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN D ON C.CAR_TYPE = D.CAR_TYPE
AND DURATION_TYPE = '30일 이상'
WHERE C.CAR_TYPE IN ('세단', 'SUV')
AND C.CAR_ID NOT IN (
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE END_DATE >= '2022-11-01' AND START_DATE < '2022-12-01')
AND ( DAILY_FEE*30*(100-D.DISCOUNT_RATE)/100 >= 500000
AND DAILY_FEE*30*(100-D.DISCOUNT_RATE)/100 < 2000000 )
ORDER BY FEE DESC, C.CAR_TYPE, C.CAR_ID DESC;
String, Date
특정 옵션이 포함된 자동차 리스트 구하기(lv1)
문제 설명
문제
CAR_RENTAL_COMPANY_CAR 테이블에서 '네비게이션' 옵션이 포함된 자동차 리스트를 출력하는 SQL문을 작성해주세요. 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
풀이
SELECT에서 모든 열들을 조회하기 위해 (SELECT * FROM CAR_RENTAL_COMPANY_CAR)
WHERE에서 OPTIONS에 네비게이션이 포함되기 위해 (WHERE OPTIONS LIKE '%네비게이션%')
ORDER BY에서 CAR_ID를 내림차순으로 정렬
SELECT *
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%네비게이션%'
ORDER BY CAR_ID DESC;
'SQL > 프로그래머스' 카테고리의 다른 글
프로그래머스 | SQL 스터디 6 (0) | 2024.09.03 |
---|---|
프로그래머스 | SQL 스터디 5 (0) | 2024.09.03 |
프로그래머스 | SQL 스터디 4 (1) | 2024.09.03 |
프로그래머스 | SQL 스터디 3 (2) | 2024.09.03 |
프로그래머스 | SQL 스터디 1 (IFNULL, USING) (0) | 2024.09.03 |