[SQL] 프로그래머스 2탄

9e0na·2024년 11월 29일
0

[SQL]

목록 보기
2/2
post-thumbnail

1일차 SQL

► 모든 코드의 컴파일 버전은 "MySQL" 기준입니다!

SELECT (10문제)

  • 평균 일일 대여 요금 구하기
-- 출저 : 프로그래머스, "평균 일일 대여 요금 구하기" 문제
-- 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/151136
SELECT ROUND(AVG(DAILY_FEE),0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR 
WHERE CAR_TYPE = 'SUV'

  • 재구매가 일어난 상품과 회원 리스트 구하기
-- 출저 : 프로그래머스, "재구매가 일어난 상품과 회원 리스트 구하기" 문제
-- 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131536
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID ASC, PRODUCT_ID DESC 

[문제 접근 방식]

  • 동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재라고 명시함.
  • 재구매 이력이 있는 회원 ID와 상품 ID를 나타내는 문제이기 때문에, Group BY를 통해 컬럼별 집계하고 이후 결과에서 2회 이상 구매한 내역만 조회하면 재구매 리스트를 뽑을 수 있다고 생각함.

  • 역순 정렬하기
-- 출저 : 프로그래머스, "역순 정렬하기" 문제
-- 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59035
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC

  • 아픈 동물 찾기
-- 출저 : 프로그래머스, "아픈 동물찾기" 문제
-- 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59036
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID

  • 어린 동물 찾기
-- 출저 : 프로그래머스, "어린 동물찾기" 문제
-- 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59037
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'

  • 동물의 아이디와 이름
-- 출저 : 프로그래머스, "동물의 아이디와 이름" 문제
-- 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59403
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS

  • 여러 기준으로 정렬하기
-- 출저 : 프로그래머스, "여러 기준으로 정렬하기" 문제
-- 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59404
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME ASC, DATETIME DESC 

  • 상위 n개 레코드
-- 출저 : 프로그래머스, "상위 n개 레코드" 문제
-- 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59405
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1 

  • 조건에 맞는 회원수 구하기
-- 출저 : 프로그래머스, "조건에 맞는 회원수 구하기" 문제
-- 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131535
SELECT COUNT(USER_ID) AS USERS 
FROM USER_INFO
WHERE YEAR(JOINED)='2021' and AGE >= 20 AND AGE <= 29;

  • 조건에 맞는 도서 리스트 출력하기
-- 출저 : 프로그래머스, "조건에 맞는 도서 리스트 출력하기" 문제
-- 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/144853
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 ASC;

[문제 접근 방식]

  • PUBLISHED_DATE의 데이트 포맷이 예시와 동일해야 정답처리되므로, SELECT 문에서 DATE_FORMAT 구문을 활용함.
  • '%Y-%m-%d' (년-월-일)로 형식을 바꿔서 문제를 품

오늘 배운 구문 정리

  • GROUP BY + HAVING : 특정 열을 그룹화한 결과에 조건을 조회
    ► HAVING -> 그룹화 후 , WHERE 그룹화 전
  • LIMIT : 레코드 출력 개수 제한
  • DATE_FOMRAT 구문 활용
    -> '%Y-%m-%d' 자유롭게 변경 가능
profile
디지털 마케터가 되기 위해 [a-zA-Z]까지 정리하는 거나입니다 😊

0개의 댓글