프로그래머스 SQL 고득점 Kit 문제 풀이
위 링크에서의 SELECT 문제를 풀고 풀이를 기록하는 게시글입니다.
1. 평균 일일 대여 요금 구하기 [문제링크]
- 반올림 ROUND함수 사용 문제
ROUND(값[, n]) : n 자리까지 표현하고 n이 없으면 소수점을 표현하지 않는다(=첫번째자리에서 반올림)
SELECT ROUND(AVG(DAILY_FEE)) AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV';
2. 재구매가 일어난 상품과 회원 리스트 구하기 [문제링크]
- COUNT(*), GROUP BY, HAVING, ORDER BY 사용문제
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID, PRODUCT_ID DESC;
3. 조건에 맞는 도서 리스트 출력하기 [문제링크]
- TO_CHAR 사용문제
SELECT BOOK_ID, TO_CHAR(PUBLISHED_DATE,'YYYY-MM-DD') PUBLISHED_DATE
FROM BOOK
WHERE TO_CHAR(PUBLISHED_DATE,'YYYY') = '2021'
AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE;
4. 12세 이하인 여자 환자 목록 출력하기 [문제링크]
- 문제에서 정렬기준이 두개인것을 잘확인해야한다. 문제 읽어볼때 한문장한문장의 의미를 다 파악하고 넘어가야한다.
- NULL일때 다른 값을 출력할 수 있는 NVL 함수 사용문제
- NVL(값,NULL일때 출력할값) 사용 문제
SELECT PT_NAME, PT_NO, GEND_CD, AGE, NVL(TLNO,'NONE') TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD ='W'
ORDER BY AGE DESC, PT_NAME;
5. 3월에 태어난 여성 회원 목록 출력하기 [문제링크]
- 동일한값인지 확인할때 연산자는 = 이다! (==로 쓰지 않도록 주의할 것)
- 문제의 조건을 다 만족시켰는지 하나하나 체크해볼것
SELECT MEMBER_ID, MEMBER_NAME, GENDER, TO_CHAR(DATE_OF_BIRTH,'YYYY-MM-DD') DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE TLNO IS NOT NULL
AND TO_CHAR(DATE_OF_BIRTH,'MM')='03'
AND GENDER ='W'
ORDER BY MEMBER_ID
6. 오프라인/온라인 판매 데이터 통합하기 [문제링크]
- 두 테이블의 모든 데이터를 출력해야하므로 UNION ALL을 사용한다.
- UNION 은 중복제거해주는 애인데 중복제거할필요 없다. 그냥 두개 합쳐도 중복이 없기 때문.
- 출력 조건 잘 확인하기.
- UNION 등 집합연산자를 사용하기 위한 조건
- SELECT 절의 칼럼 수가 동일해야한다.
- SELECT 절의 동일 위치에 존재하는 칼럼의 데이터 타입이 상호호환(반드시 동일한 타입일 필요는 없다는 것) 가능 해야한다.
SELECT TO_CHAR(SALES_DATE,'YYYY-MM-DD') SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE TO_CHAR(SALES_DATE, 'YYYY-MM')='2022-03'
UNION ALL
SELECT TO_CHAR(SALES_DATE,'YYYY-MM-DD') SALES_DATE, PRODUCT_ID, NULL, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE TO_CHAR(SALES_DATE, 'YYYY-MM')='2022-03'
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;
7. 아픈 동물 찾기 [문제링크]
- WHERE( =조건), ORDER BY 사용 문제
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION ='Sick'
ORDER BY ANIMAL_ID;
8. 어린 동물 찾기 [문제링크]
- WHERE (!= 조건), ORDER BY 사용 문제
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID;
9. 동물의 아이디와 이름 [문제링크]
- ORDER BY 사용문제
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
10. 여러 기준으로 정렬하기 [문제링크]
- 날짜가 최근인 순서로 정렬하기위해 ORDER BY DATE DESC 를 사용한다.
- 최근일 수록 날짜는 큰 값이다.
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC;
11. 조건에 맞는 회원 수 구하기
SELECT COUNT(*)
FROM USER_INFO
WHERE TO_CHAR(JOINED,'YYYY') = '2021'
AND AGE BETWEEN 20 AND 29
12. 흉부외과 또는 일반외과 의사 목록 출력하기
SELECT DR_NAME, DR_ID, MCDP_CD, TO_CHAR(HIRE_YMD,'YYYY-MM-DD') HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD IN ('CS','GS')
ORDER BY HIRE_YMD DESC, DR_NAME
13. 조건에 부합하는 중고거래 댓글 조회하기 [문제링크]
- 조인 사용
SELECT B.TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, R.CONTENTS, TO_CHAR(R.CREATED_DATE,'YYYY-MM-DD') CREATED_DATE
FROM USED_GOODS_BOARD B, USED_GOODS_REPLY R
WHERE B.BOARD_ID = R.BOARD_ID
AND TO_CHAR(B.CREATED_DATE,'YYYY-MM') = '2022-10'
ORDER BY R.CREATED_DATE, B.TITLE
14. 과일로 만든 아이스크림 고르기[문제링크]
SELECT B.FLAVOR
FROM FIRST_HALF A, ICECREAM_INFO B
WHERE A.FLAVOR = B.FLAVOR
AND A.TOTAL_ORDER > 3000
AND B.INGREDIENT_TYPE ='fruit_based'
ORDER BY A.TOTAL_ORDER DESC
15. 상위 n개 레코드
가장 먼저 들어온 동물은 날짜가 가장 작은 날을 가진동물이다!!
SELECT NAME
FROM ANIMAL_INS
WHERE DATETIME = (SELECT MIN(DATETIME)
FROM ANIMAL_INS)
16. 역순 정렬하기
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC
17. 서울에 위치한 식당 목록 출력하기
- 소수점 세 번째 자리에서 반올림
- 두번째짜리까지 나타낸다는 의미임을 캐치해야 함
- ROUND(A) 만하면 첫번쨰 자리에서 반올림
- ROUND(A, 2) : 반올림해서 2자리까지 나타낸다는 의미
- 서울에 있는 식당 :A LIKE '서울%'
- 해당 식당데이터의 평균을 구해야한다. : GROUP BY (SELECT 절에 사용할 column들)
- 평균을 기준으로 정렬해야한다.: ORDER BY SCROE
- ORDER BY는 SELECT 후 제일 마지막에 실행되므로 AS로 선언한 column명을 사용할 수있다.
SELECT A.REST_ID, A.REST_NAME, A.FOOD_TYPE, A.FAVORITES, A.ADDRESS, ROUND(AVG(B.REVIEW_SCORE),2) AS SCORE
FROM REST_INFO A, REST_REVIEW B
WHERE A.REST_ID = B.REST_ID
AND A.ADDRESS LIKE '서울%'
GROUP BY A.REST_ID, A.REST_NAME, A.FOOD_TYPE, A.FAVORITES, A.ADDRESS
ORDER BY SCORE DESC, A.FAVORITES DESC'SQL 고득점 Kit 문제풀이' 카테고리의 다른 글
| 프로그래머스 SQL 고득점 Kit - JOIN 문제 풀이 (Oracle) (0) | 2023.12.26 |
|---|---|
| 프로그래머스 SQL 고득점 Kit - IS NULL 문제 풀이 (Oracle) (0) | 2023.12.26 |
| 프로그래머스 SQL 고득점 Kit - GROUP BY 문제 풀이 (Oracle) (0) | 2023.12.26 |
| 프로그래머스 SQL 고득점 Kit - SUM,MAX,MIN 문제 풀이 (Oracle) (0) | 2023.12.26 |
| 프로그래머스 SQL 고득점 Kit 문제 풀이 (Oracle) (0) | 2023.12.26 |