Lv. 2 가격대 별 상품 개수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/131530
WITH T1 AS (
SELECT *
, PRICE DIV 10000 *10000 AS 'PRICE_GROUP'
FROM PRODUCT
)
SELECT PRICE_GROUP, COUNT(*) AS PRODUCTS
FROM T1
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP
+) WITH 절로 만든 테이블
❗DIV로 몫 구하고 10000 곱해서 GROUP BY 할 칼럼 만들기
❗GROUP BY 하기
Lv. 2 물고기 종류 별 잡은 수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/293257
SELECT COUNT(*) AS FISH_COUNT, FN.FISH_NAME
FROM FISH_INFO AS FI
LEFT JOIN FISH_NAME_INFO AS FN ON FI.FISH_TYPE = FN.FISH_TYPE
GROUP BY FN.FISH_NAME
ORDER BY FISH_COUNT DESC
+) LEFT JOIN 절로 만든 테이블
❗LEFT JOIN 으로 테이블 결합
❗GROUP BY 하기
❗ORDER BY DESC 순서 유의
Lv. 2 ROOT 아이템 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/273710
SELECT II.ITEM_ID, II.ITEM_NAME
FROM ITEM_INFO AS II
LEFT JOIN ITEM_TREE AS IT ON II.ITEM_ID = IT.ITEM_ID
WHERE IT.PARENT_ITEM_ID IS NULL
ORDER BY II.ITEM_ID
+) LEFT JOIN 로 만든 테이블
❗LEFT JOIN 으로 테이블 결합
❗WHERE 절에 IS NULL 사용해서 조건 충족
Lv. 2 연도 별 평균 미세먼지 농도 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/284530
WITH T1 AS (
SELECT *
, YEAR(YM) AS YEAR
FROM AIR_POLLUTION
WHERE LOCATION2 = '수원'
)
SELECT YEAR
, ROUND(AVG(PM_VAL1),2) AS 'PM10'
, ROUND(AVG(PM_VAL2),2) AS 'PM2.5'
FROM T1
GROUP BY YEAR
ORDER BY YEAR ASC
+) WITH 절로 만든 테이블
❗YEAR() 사용해서 기준 년도 추출하기
❗WHERE 절에 조건 달기
❗ROUND(), AVG() 사용해서 출력 조건 충족하기
Lv. 2 조건에 부합하는 중고거래 상태 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/164672
SELECT BOARD_ID, WRITER_ID, TITLE, PRICE
, CASE
WHEN STATUS = 'SALE' THEN '판매중'
WHEN STATUS = 'RESERVED' THEN '예약중'
ELSE '거래완료'
END AS 'STATUS'
FROM USED_GOODS_BOARD
WHERE CREATED_DATE = '2022-10-05'
ORDER BY BOARD_ID DESC
❗CASE WHEN 사용해서 조건부 처리
❗WHERE 절에 날짜 조건 달기
❗ORDER BY 절에 정렬 기준 맞추기
Lv. 2 월별 잡은 물고기 수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/293260
SELECT COUNT(*) AS FISH_COUNT
, MONTH(TIME) AS MONTH
FROM FISH_INFO
GROUP BY MONTH(TIME)
ORDER BY MONTH(TIME)
❗GROUP BY 절에 MONTH() 사용하기
- 이전에는 MONTH() 같이 칼럼이 필요할 때 WITH 절로 따로 만들고 처리 했는데, WITH 절 안써도 바로 됨!
Lv. 2 재구매가 일어난 상품과 회원 리스트 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/131536
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID ASC, PRODUCT_ID DESC
❗GROUP BY 절에 조건 2개 넣기
❗HAVING 절에 조건 달기
- GROUP BY 이후에 하는 조건이기에 HAVING 사용
❗ORDER BY 절에 조건 2개 맞추기
Lv. 2 자동차 평균 대여 기간 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/157342
SELECT CAR_ID
, ROUND(AVG(DATEDIFF(END_DATE,START_DATE)+1),1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC
SELECT 절
❗DATEDIFF()로 빌린 날짜 계산하고 +1 하기
- 같은 날짜에 빌리고 반납한 것을 1로 계산하기 때문
- DATEDIFF() 만 하면 같은 날짜에 대여 반납을 0으로 판단 -> +1을 해야 날짜가 맞다
❗RODUN(), AVG() 함수 사용해서 조건 맞추기
❗HAVING 절에 조건 달기
- GROUP BY 이후에 하는 조건이기에 HAVING 사용
❗ORDER BY 절에 조건 2개 맞추기
Lv. 2 조건에 맞는 사원 정보 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/284527
WITH T1 AS (
SELECT EMP_NO, SUM(SCORE) AS SCORE
FROM HR_GRADE
GROUP BY EMP_NO
ORDER BY SUM(SCORE) DESC
LIMIT 1
)
SELECT SCORE, T1.EMP_NO, EMP_NAME, POSITION, EMAIL
FROM T1
INNER JOIN HR_EMPLOYEES AS HR_E ON T1.EMP_NO = HR_E.EMP_NO
+) WITH 절로 만든 테이블
❗LIMIT 사용해서 가장 점수가 높은 사원만 추출
❗INNER JOIN 사용해서 겹치는 정보 하나만 추출
❗HR_DEPARTMENT 테이블은 이 문제에서 안 사용해도 코딩이 돌아간다...
Lv. 2 특정 물고기를 잡은 총 수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/298518
SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO AS FI
LEFT JOIN FISH_NAME_INFO AS FNI ON FI.FISH_TYPE = FNI.FISH_TYPE
WHERE FISH_NAME IN ('BASS','SNAPPER')
❗LEFT JOIN 으로 테이블 연결
❗WHERE 절에 IN으로 두 개의 조건 충족시키기
❗물고기 종류 별로 개수 세는 것이 아니니 GROUP BY 사용 X
'SQL > SQL | 프로그래머스 코딩테스트' 카테고리의 다른 글
[SQL] 프로그래머스 코딩테스트 : Lv3. (1) (4) | 2024.09.14 |
---|---|
[SQL] 프로그래머스 코딩테스트 : Lv2. (4) (1) | 2024.09.13 |
[SQL] 프로그래머스 코딩테스트 : Lv2. (2) (1) | 2024.09.11 |
[SQL] 프로그래머스 코딩테스트 : Lv2. (1) (0) | 2024.09.10 |
[SQL] 프로그래머스 코딩테스트 : Lv1. (3) (0) | 2024.09.08 |