728x90
프로그래머스 스쿨 - 온라인 IT 특화 교육 전문 플랫폼
평균 일일 대여 요금 구하기(Lv. 1)
SELECT ROUND(AVG(DAILY_FEE)) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV';
- 자동차 종류가 'SUV’ → WHERE
- 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림 → AVG(), ROUND()
과일로 만든 아이스크림 고르기(Lv. 1)
SELECT A.FLAVOR
FROM FIRST_HALF AS A
JOIN ICECREAM_INFO AS B
ON A.FLAVOR = B.FLAVOR
WHERE A.TOTAL_ORDER > 3000
AND B.INGREDIENT_TYPE = 'fruit_based'
ORDER BY A.TOTAL_ORDER DESC;
12세 이하인 여자 환자 목록 출력하기(Lv. 1)
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, 'NONE') AS TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME;
- 전화번호가 없는 경우, 'NONE'으로 출력 → IFNULL()
흉부외과 또는 일반외과 의사 목록 출력하기(Lv. 1)
- IN 사용
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD IN ('CS', 'GS')
ORDER BY HIRE_YMD DESC, DR_NAME;
- REGEXP 사용
SELECT DR_NAME, DR_ID, MCDP_CD,
DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD REGEXP 'CS|GS'
ORDER BY HIRE_YMD DESC, DR_NAME;
강원도에 위치한 생산공장 목록 출력하기(Lv. 1)
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도%'
ORDER BY FACTORY_ID;
3월에 태어난 여성 회원 목록 출력하기(Lv. 2)
- 3월인지를 판별하는 쿼리를 짜는 방식이 2가지
- month() 이용
SELECT MEMBER_ID, MEMBER_NAME, GENDER,
DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE MONTH(DATE_OF_BIRTH) = 3
AND GENDER = 'W'
AND TLNO IS NOT NULL
ORDER BY MEMBER_ID;
- LIKE 이용
SELECT MEMBER_ID, MEMBER_NAME, GENDER,
DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE DATE_OF_BIRTH LIKE '%-03-%'
AND GENDER = 'W'
AND TLNO IS NOT NULL
ORDER BY MEMBER_ID;
인기있는 아이스크림(Lv. 1)
SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID;
서울에 위치한 식당 목록 출력하기(Lv. 4)
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 AS A
JOIN REST_REVIEW AS B
ON A.REST_ID = B.REST_ID
WHERE A.ADDRESS LIKE '서울%'
GROUP BY B.REST_ID
ORDER BY SCORE DESC, FAVORITES DESC;
- 서울에 위치한 식당 → 정답: LIKE ‘서울%’, 오답: LIKE ‘%서울%’
재구매가 일어난 상품과 회원 리스트 구하기(Lv. 2)
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(ONLINE_SALE_ID) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC;
모든 레코드 조회하기(Lv. 1)
SELECT *
FROM ANIMAL_INS;
역순 정렬하기(Lv. 1)
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;
오프라인/온라인 판매 데이터 통합하기(Lv. 4)
- UNION
-- 2022년 3월 온라인 쇼핑몰 판매 데이터 조회
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE SALES_DATE LIKE '2022-03%'
-- 두 테이블을 하나로 합칠 때 중복 제거X
UNION ALL
-- 2022년 3월 오프라인 쇼핑몰 판매 데이터 조회
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE LIKE '2022-03%'
-- 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;
- UNION + 서브쿼리
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM (
SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
UNION
SELECT SALES_DATE, PRODUCT_ID, NULL, SALES_AMOUNT
FROM OFFLINE_SALE
) AS A
WHERE SALES_DATE LIKE '2022-03%'
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;
아픈 동물찾기(Lv. 1)
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID;
어린 동물찾기(Lv. 1)
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID;
동물의 아이디와 이름(Lv. 1)
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS;
여러 기준으로 정렬하기(Lv. 1)
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC;
상위 n개 레코드(Lv. 1)
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;
조건에 맞는 회원수 구하기(Lv. 1)
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE YEAR(JOINED) = 2021
AND AGE BETWEEN 20 AND 29;
- BETWEEN A AND B
조건에 맞는 도서 리스트 출력하기(Lv. 1)
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK
WHERE YEAR(PUBLISHED_DATE) = 2021
AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE;
- 2021년에 출판된 '인문' 카테고리에 속하는 → WHERE
- 출판일 → DATE_FORMAT(, ‘%Y-%m-%d’)
조건에 부합하는 중고거래 댓글 조회하기(Lv. 1)
SELECT A.TITLE, A.BOARD_ID, B.REPLY_ID, B.WRITER_ID, B.CONTENTS,
DATE_FORMAT(B.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD AS A
JOIN USED_GOODS_REPLY AS B
ON A.BOARD_ID = B.BOARD_ID
WHERE A.CREATED_DATE LIKE '2022-10%'
ORDER BY CREATED_DATE, TITLE;
728x90
'SQL > [프로그래머스] SQL 고득점 Kit' 카테고리의 다른 글
[프로그래머스] SQL 고득점 Kit 문제풀이 - String, Date (1) | 2023.10.23 |
---|---|
[프로그래머스] SQL 고득점 Kit 문제풀이 - JOIN (0) | 2023.10.23 |
[프로그래머스] SQL 고득점 Kit 문제풀이 - IS NULL (2) | 2023.10.23 |
[프로그래머스] SQL 고득점 Kit 문제풀이 - GROUP BY (0) | 2023.10.23 |
[프로그래머스] SQL 고득점 Kit 문제풀이 - SUM, MAX, MIN (0) | 2023.10.23 |