Lv3. 카테고리 별 도서 판매량 집계하기
https://school.programmers.co.kr/learn/courses/30/lessons/144855
SELECT b.CATEGORY
, SUM(SALES) AS TOTAL_SALES
FROM BOOK AS b
INNER JOIN BOOK_SALES AS bs ON b.BOOK_ID = bs.BOOK_ID
WHERE bs.SALES_DATE BETWEEN '2022-01-01' AND '2022-01-31'
GROUP BY b.CATEGORY
ORDER BY b.CATEGORY
❗WHERE 절에 BETWEEN 사용해서 조건 충족
Lv3. 조건별로 분류하여 주문상태 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/131113
SELECT ORDER_ID
, PRODUCT_ID
, DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS OUT_DATE
, CASE WHEN DATE_FORMAT(OUT_DATE, '%Y-%m-%d') <= '2022-05-01' THEN '출고완료'
WHEN DATE_FORMAT(OUT_DATE, '%Y-%m-%d') > '2022-05-01' THEN '출고대기'
WHEN DATE_FORMAT(OUT_DATE, '%Y-%m-%d') IS NULL THEN '출고미정'
END AS '출고여부'
FROM FOOD_ORDER
ORDER BY ORDER_ID
❗DATE_FORMAT() 으로 형식 맞추기
❗CASE WHEN 으로 조건 충족
Lv3. 있었는데요 없었습니다
https://school.programmers.co.kr/learn/courses/30/lessons/59043
SELECT ins.ANIMAL_ID
, ins.NAME
FROM ANIMAL_INS AS ins
INNER JOIN ANIMAL_OUTS AS outs ON ins.ANIMAL_ID = outs.ANIMAL_ID
AND ins.DATETIME >= outs.DATETIME
ORDER BY ins.DATETIME ASC
+) INNER JOIN 절
❗INNER JOIN 시에 AND 로 조건에 해당하는 행만 JOIN
+) INNER JOIN 절 AND 없는 테이블 연결
❗겹치는 모든 테이블 요소가 연결
Lv3. 오랜 기간 보호한 동물 (1)
https://school.programmers.co.kr/learn/courses/30/lessons/59044
SELECT ins.NAME
, ins.DATETIME
FROM ANIMAL_INS AS ins
LEFT JOIN ANIMAL_OUTS AS outs ON ins.ANIMAL_ID = outs.ANIMAL_ID
WHERE outs.ANIMAL_ID IS NULL
ORDER BY ins.DATETIME
LIMIT 3
❗LIMIT으로 출력 제한
+) INNER JOIN 절
❗INNER JOIN 시에 AND 로 조건에 해당하는 행만 JOIN
+) INNER JOIN 절 WHERE 없는 테이블 연결
❗해당하는 모든 행 추출
Lv3. 오랜 기간 보호한 동물 (2)
https://school.programmers.co.kr/learn/courses/30/lessons/59411
SELECT ins.ANIMAL_ID
, ins.NAME
FROM ANIMAL_OUTS AS outs
INNER JOIN ANIMAL_INS AS ins ON outs.ANIMAL_ID = ins.ANIMAL_ID
ORDER BY DATEDIFF(outs.DATETIME, ins.DATETIME) DESC
LIMIT 2
❗INNER JOIN 으로 테이블 연결
❗ORDER BY 절에 DATEDIFF() 사용해서 조건 충족
❗LIMIT 으로 출력 제한
Lv3. 대여 기록이 존재하는 자동차 리스트 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/157341
SELECT DISTINCT car.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR AS car
INNER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS rent ON car.CAR_ID = rent.CAR_ID
WHERE rent.START_DATE BETWEEN '2022-10-01' AND '2022-10-31'
AND car.CAR_TYPE = '세단'
ORDER BY car.CAR_ID DESC
❗INNER JOIN 으로 겹치는 테이블만 결합
❗WHERE 절에 BETWEEN 사용해서 조건 달기
Lv3. 조건에 맞는 사용자와 총 거래금액 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/164668
SELECT u.USER_ID, u.NICKNAME
, SUM(b.PRICE) AS TOTAL_SALES
FROM USED_GOODS_BOARD AS b
INNER JOIN USED_GOODS_USER AS u ON b.WRITER_ID = u.USER_ID
WHERE b.STATUS = 'DONE'
GROUP BY u.USER_ID
HAVING SUM(b.PRICE) >= 700000
ORDER BY TOTAL_SALES
❗INNER JOIN 으로 겹치는 테이블만 결합
❗WHERE 절에 조건 달아서 데이터 1차 필터링
❗GROUP BY 후 추가 필터링이 필요해 HAVING 사용
Lv3. 즐겨찾기가 가장 많은 식당 정보 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/131123
WITH FOOD_ROWS AS (
SELECT *
, ROW_NUMBER() OVER (PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS ROW_N
FROM REST_INFO
)
SELECT FOOD_TYPE
, REST_ID
, REST_NAME
, FAVORITES
FROM FOOD_ROWS
WHERE ROW_N = 1
ORDER BY FOOD_TYPE DESC
❗WHERE 절에 조건 달기
❗ORDER BY 순서 맞추기
+) WITH 절 T1
❗ROW_NUMBER() 윈도우 함수 사용
❗OVER (PARTITION BY ORDER BY) 사용해서 번호를 매길 기준 및 순서 정의하기
Lv3. 없어진 기록 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/59042
SELECT OUTS.ANIMAL_ID
, OUTS.NAME
FROM ANIMAL_OUTS AS OUTS
LEFT JOIN ANIMAL_INS AS INS ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
WHERE INS.ANIMAL_ID IS NULL
❗WHERE 절에 IS NULL 조건 사용
Lv3. 조건에 맞는 사용자 정보 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/164670
WITH CNT AS (
SELECT U.USER_ID
FROM USED_GOODS_BOARD AS B
LEFT JOIN USED_GOODS_USER AS U ON B.WRITER_ID = U.USER_ID
GROUP BY U.USER_ID
HAVING COUNT(*) >= 3
)
SELECT USER_ID
, NICKNAME
, CONCAT(CITY, ' ', STREET_ADDRESS1, ' ' ,STREET_ADDRESS2) AS '전체주소'
, CONCAT(SUBSTR(TLNO,1,3), '-',SUBSTR(TLNO,4,4), '-', SUBSTR(TLNO,8,4)) AS '전화번호'
FROM USED_GOODS_USER AS U
WHERE U.USER_ID IN (SELECT * FROM CNT)
ORDER BY USER_ID DESC
❗CONCAT() 으로 출력 조건 맞추기
❗SUBSTR() 이용해 전화번호 포맷 맞추기
+) WITH 절 CNT
❗LEFT JOIN 으로 테이블 결합
❗ GROUP BY 이후에 조건이 있어 HAVING 사용
+) WHERE 절 서브 쿼리
❗ WITH 절 CNT의 USER_ID
'SQL > SQL | 프로그래머스 코딩테스트' 카테고리의 다른 글
[SQL] 프로그래머스 코딩테스트 : Lv4. (1) (3) | 2024.10.02 |
---|---|
[SQL] 프로그래머스 코딩테스트 : Lv3. (2) (2) | 2024.09.23 |
[SQL] 프로그래머스 코딩테스트 : Lv2. (4) (1) | 2024.09.13 |
[SQL] 프로그래머스 코딩테스트 : Lv2. (3) (0) | 2024.09.13 |
[SQL] 프로그래머스 코딩테스트 : Lv2. (2) (1) | 2024.09.11 |