프로그래머스 SQL 고득점 Kit
1. 아픈 동물 찾기
- https://school.programmers.co.kr/learn/courses/30/lessons/59036
- 동물 보호소에 들어온 동물 중 아픈 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE INTAKE_CONDITION="Sick"
ORDER BY ANIMAL_ID;
2. 동물의 아이디와 이름
- https://school.programmers.co.kr/learn/courses/30/lessons/59403
- 동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
3. 이름이 있는 동물의 아이디
- https://school.programmers.co.kr/learn/courses/30/lessons/59407
- 동물 보호소에 들어온 동물 중, 이름이 있는 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.
SELECT ANIMAL_ID FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID ASC;
4. 상위 n개 레코드
- https://school.programmers.co.kr/learn/courses/30/lessons/59405
- 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.
SELECT NAME FROM ANIMAL_INS
WHERE DATETIME=(SELECT min(DATETIME) FROM ANIMAL_INS);
5. 여러 기준으로 정렬하기
- https://school.programmers.co.kr/learn/courses/30/lessons/59404
- 동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.
SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS
ORDER BY NAME ASC, DATETIME DESC;
6. 어린 동물 찾기
- https://school.programmers.co.kr/learn/courses/30/lessons/59037
- 동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE INTAKE_CONDITION!='Aged'
ORDER BY ANIMAL_ID;
7. 역순 정렬하기
- https://school.programmers.co.kr/learn/courses/30/lessons/59035
- 동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요.
SELECT NAME, DATETIME FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;
8. 강원도에 위치한 생산공장 목록 출력하기
- https://school.programmers.co.kr/learn/courses/30/lessons/131112
- FOOD_FACTORY 테이블에서 강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회하는 SQL문을 작성해주세요. 이때 결과는 공장 ID를 기준으로 오름차순 정렬해주세요.
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도%'
ORDER BY FACTORY_ID;
9. 나이 정보가 없는 회원 수 구하기
- https://school.programmers.co.kr/learn/courses/30/lessons/131528
- USER_INFO 테이블에서 나이 정보가 없는 회원이 몇 명인지 출력하는 SQL문을 작성해주세요. 이때 컬럼명은 USERS로 지정해주세요.
SELECT COUNT(USER_ID) AS USERS FROM USER_INFO
WHERE AGE IS NULL;
10. 경기도에 위치한 식품창고 목록 출력하기
- https://school.programmers.co.kr/learn/courses/30/lessons/131114
- FOOD_WAREHOUSE 테이블에서 경기도에 위치한 창고의 ID, 이름, 주소, 냉동시설 여부를 조회하는 SQL문을 작성해주세요. 이때 냉동시설 여부가 NULL인 경우, 'N'으로 출력시켜 주시고 결과는 창고 ID를 기준으로 오름차순 정렬해주세요.
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IF(FREEZER_YN IS NULL, 'N', FREEZER_YN) FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '경기도%'
ORDER BY WAREHOUSE_ID ASC;
+ IF 대신 IFNULL, COALESCE 사용 가능
11. 조건에 맞는 회원수 구하기
- https://school.programmers.co.kr/learn/courses/30/lessons/131535
- USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.
SELECT count(USER_ID) as USERS from USER_INFO
where JOINED like '2021%'
and AGE between 20 and 29;
12. 이름이 없는 동물의 아이디
- https://school.programmers.co.kr/learn/courses/30/lessons/59039
- 동물 보호소에 들어온 동물 중, 이름이 없는 채로 들어온 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.
SELECT ANIMAL_ID FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID ASC;
13. 가장 비싼 상품 구하기
- https://school.programmers.co.kr/learn/courses/30/lessons/131697
- PRODUCT 테이블에서 판매 중인 상품 중 가장 높은 판매가를 출력하는 SQL문을 작성해주세요. 이때 컬럼명은 MAX_PRICE로 지정해주세요.
SELECT MAX(PRICE) AS MAX_PRICE FROM PRODUCT
14. 흉부외과 또는 일반외과 의사 목록 출력하기
- https://school.programmers.co.kr/learn/courses/30/lessons/132203
- DOCTOR 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬해주세요.
SELECT DR_NAME,DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD,'%Y-%m-%d') FROM DOCTOR
WHERE MCDP_CD = 'CS' OR MCDP_CD = 'GS'
ORDER BY HIRE_YMD DESC, DR_NAME ASC;
+ DATE_FORMAT(날짜, 형식) : 날짜의 형식을 지정할 수 있음
구분기호 | 역할 | 예 | 구분기호 | 역할 | 예 |
%Y | 4자리 년도 | 2023 | %H | 시간 24시간 | 17 |
%y | 2자리 년도 | 23 | %h | 시간 12시간 | 05 |
%M | 영문 월 | March | %i | 분 | 45 |
%m | 숫자 2자리 월 | 03 | %s | 초 | 31 |
%d | 2자리 일 | 22 | %D | 영문 일 | 22th |
예) 2023-03-22 17:45:31 일때
15. 12세 이하인 여자 환자 목록 출력하기
- https://school.programmers.co.kr/learn/courses/30/lessons/132201
- PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요.
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IF(TLNO IS NULL, 'NONE', TLNO) AS TLNO FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME ASC;
16. 인기있는 아이스크림
- https://school.programmers.co.kr/learn/courses/30/lessons/133024
- 상반기에 판매된 아이스크림의 맛을 총주문량을 기준으로 내림차순 정렬하고 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여 조회하는 SQL 문을 작성해주세요.
SELECT FLAVOR FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID ASC;
17. 모든 레코드 조회하기
- https://school.programmers.co.kr/learn/courses/30/lessons/59034
- 동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요.
SELECT * FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;
18. 조건에 맞는 도서 리스트 출력하기
- https://school.programmers.co.kr/learn/courses/30/lessons/144853
- BOOK 테이블에서 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트를 찾아서 도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력하는 SQL문을 작성해주세요.
결과는 출판일을 기준으로 오름차순 정렬해주세요.
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE FROM BOOK
WHERE PUBLISHED_DATE LIKE '2021%' AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE;
19. 평균 일일 대여 요금 구하기
- https://school.programmers.co.kr/learn/courses/30/lessons/151136
- 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';
20. 최댓값 구하기
- https://school.programmers.co.kr/learn/courses/30/lessons/59415
- 가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.
SELECT DATETIME FROM ANIMAL_INS
WHERE DATETIME=(SELECT max(DATETIME) from ANIMAL_INS);
21. 과일로 만든 아이스크림 고르기
- https://school.programmers.co.kr/learn/courses/30/lessons/133025
- 상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL 문을 작성해주세요.
SELECT F.FLAVOR FROM FIRST_HALF F
INNER JOIN ICECREAM_INFO I ON F.FLAVOR = I.FLAVOR
WHERE F.TOTAL_ORDER > 3000 AND I.INGREDIENT_TYPE = 'fruit_based'
ORDER BY F.TOTAL_ORDER DESC;
22. 특정 옵션이 포함된 자동차 리스트 구하기
- https://school.programmers.co.kr/learn/courses/30/lessons/157343
- CAR_RENTAL_COMPANY_CAR 테이블에서 '네비게이션' 옵션이 포함된 자동차 리스트를 출력하는 SQL문을 작성해주세요. 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
SELECT CAR_ID, CAR_TYPE, DAILY_FEE, OPTIONS FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%네비게이션%'
ORDER BY CAR_ID DESC;
23. 자동차 대여 기록에서 장기/단기 대여 구분하기
- https://school.programmers.co.kr/learn/courses/30/lessons/151138
- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
SELECT HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE,'%Y-%m-%d') AS START_DATE, DATE_FORMAT(END_DATE,'%Y-%m-%d') AS END_DATE, IF(DATEDIFF(END_DATE, START_DATE)+1 >= 30, '장기 대여', '단기 대여') AS RENT_TYPE FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC;
+ DATEDIFF : 두 날짜값의 차를 int로 반환. 순서 중요
+ 시작한 날짜를 세기 위해 +1 해줘야 함.
24. 조건에 부합하는 중고거래 댓글 조회하기
- https://school.programmers.co.kr/learn/courses/30/lessons/164673
- USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요. 결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요.
SELECT B.TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, R.CONTENTS, DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE FROM USED_GOODS_BOARD B
INNER JOIN USED_GOODS_REPLY R ON B.BOARD_ID = R.BOARD_ID
WHERE B.CREATED_DATE LIKE '2022-10%'
ORDER BY R.CREATED_DATE ASC, B.TITLE ASC;
'SQL' 카테고리의 다른 글
[항해99 14기 온보딩] SQL 실습과제 - 프로그래머스 SQL 고득점 Kit lv3 (0) | 2023.03.23 |
---|---|
[항해99 14기 온보딩] SQL 실습과제 - 프로그래머스 SQL 고득점 Kit - lv2 (0) | 2023.03.23 |
SQL 4주차 (0) | 2023.03.21 |
SQL 3주차 (0) | 2023.03.21 |
SQL 1,2주차 (0) | 2023.03.20 |