SQL/[프로그래머스] SQL 고득점 Kit

[프로그래머스] SQL 고득점 Kit 문제풀이 - SELECT

HSY_mumu 2022. 11. 17. 15:12
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)

  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;
  1. 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가지
  1. 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;
  1. 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)

  1. 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;
  1. 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