(정답주의) 프로그래머스 SQL 고득점 Kit - SELECT

Jiwon Kang·2023년 5월 12일
0

문제풀러 가기 (링크)

  • 프로그래머스 시작 전에, 예시 답변과 테스트 케이스가 일치 않은 경우가 많으니 주의 랍니다 (예, 예시에는 있는 row가 테스트 코드 실행시 안뜨는 현상 존재)

  • 아래 답안 순서가 프로그래머스 내 노출순서와 일치하지 않습니다


정답주의

  1. 3월에 태어난 여성 회원 목록 출력하기
SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH, "%Y-%m-%d")
FROM MEMBER_PROFILE
WHERE 
month(DATE_OF_BIRTH)=3
AND GENDER = 'W'
AND TLNO IS NOT NULL
ORDER BY MEMBER_ID;
  • 날짜 포맷팅하기
    DATE_FORMAT(DATE_OF_BIRTH, "%Y-%m-%d")

  • 날짜에서 월 정보만 추출하기
    month(DATE_OF_BIRTH) = 3

  1. 과일로 만든 아이스크림 고르기
SELECT a.FLAVOR FROM FIRST_HALF as a
INNER 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;
  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
INNER JOIN USED_GOODS_REPLY as b
ON a.BOARD_ID = b.BOARD_ID
WHERE a.CREATED_DATE BETWEEN '2022-10-01' AND '2022-10-31'
ORDER BY b.CREATED_DATE, a.TITLE;
  • (본인에게 하는 팁) JOIN 할 때 ON 넣는거 빼먹지 마세요 🥹
  • 2022년 10월에 작성된 게시글 뽑을 때 DATE_FORMAT(DATE_OF_BIRTH, "%Y-%m") = '2022-10' 이렇게 하는 경우도 있었음
  1. 강원도에 위치한 생산공장 목록 출력하기
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도 %'
ORDER BY FACTORY_ID;
  1. 흉부외과 또는 일반외과 의사 목록 출력하기
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') as 'HIRE_YMD'
FROM DOCTOR
WHERE MCDP_CD = 'CS' OR MCDP_CD = 'GS'
ORDER BY HIRE_YMD DESC, DR_NAME;
  • 조건 두개 사용하기 (콤마로 나열)
    ORDER BY HIRE_YMD DESC, DR_NAME
  1. 인기있는 아이스크림
SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID;
  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;
  1. 모든 레코드 조회하기
SELECT * 
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
  1. 오프라인/온라인 판매 데이터 통합하기
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') as 'SALES_DATE', PRODUCT_ID, NULL as 'USER_ID', SALES_AMOUNT
FROM OFFLINE_SALE as off
WHERE DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-03'

UNION ALL

SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') as 'SALES_DATE', PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE as ons

WHERE DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-03'

ORDER BY SALES_DATE, 
PRODUCT_ID, 
USER_ID;
  • 두개의 테이블을 합치기
    UNION 중복값 무시
    UNION ALL 중복값 무시하고 합치기

  • NULL을 문자열로 하면 오답

  1. 재구매가 일어난 상품과 회원 리스트 구하기
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(PRODUCT_ID) > 1
ORDER BY USER_ID, PRODUCT_ID DESC;
  • GROUP BY 여러개가 가능하다
  • HAVING vs. WHERE: WHERE에서는 집계 함수 못쓰니까 HAVING을 써준다
  1. 평균 일일 대여 요금 구하기
SELECT ROUND(AVG(DAILY_FEE), 0) as 'AVERAGE_FEE'
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV';
  • 반올림하기 ROUND
  • 평균 구하기 AVG
  • 그냥 소수점 포맷팅은 FORMAT
  1. 서울에 위치한 식당 목록 출력하기
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

INNER JOIN REST_REVIEW as b
ON a.REST_ID = b.REST_ID

WHERE a.ADDRESS LIKE '서울%'

GROUP BY a.REST_ID

ORDER BY SCORE DESC, a.FAVORITES DESC;
  1. 역순 정렬하기
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY  ANIMAL_ID DESC
  1. 아픈 동물 찾기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID;
  1. 어른 동물 찾기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID;
  1. 동물의 아이디와 이름
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
  1. 여러 기준으로 정렬하기
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC;
  1. 상위 n개 레코드
SELECT NAME FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;
  1. 조건에 맞는 회원수 구하기
SELECT count(USER_ID) as USERS
FROM USER_INFO
WHERE YEAR(JOINED) = '2021'
AND AGE BETWEEN 20 and 29;
  • 사이값 비교할 때는 BETWEEN
profile
도파민 중독

0개의 댓글