프로그래머스 | SQL 스터디 8

2024. 9. 3. 19:35·SQL/프로그래머스

SELECT

인기있는 아이스크림(Lv1)

문제 설명

​

문제

상반기에 판매된 아이스크림의 맛을 총주문량을 기준으로 내림차순 정렬하고 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여 조회하는 SQL 문을 작성해주세요.

​

풀이

SELECT로 FLAVOR을 선택

​

ORDER BY에서 총 주문량을 내림차순 정렬, 출하 번호 기준으로 오름차순 정렬

SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID;

SUM, MAX, MIN

물고기 종류별 대어 찾기(Lv3)

문제 설명

​

문제

물고기 종류 별로 가장 큰 물고기의 ID, 물고기 이름, 길이를 출력하는 SQL 문을 작성해주세요.

물고기의 ID 컬럼명은 ID, 이름 컬럼명은 FISH_NAME, 길이 컬럼명은 LENGTH로 해주세요.

결과는 물고기의 ID에 대해 오름차순 정렬해주세요.

(단, 물고기 종류별 가장 큰 물고기는 1마리만 있으며 10cm 이하의 물고기가 가장 큰 경우는 없습니다.)

​

풀이

SELECT에서 ID, 물고기이름, 길이를 조회

​

JOIN에서 공통된 칼럼인 FISH_TYPE으로 두 테이블을 연결

​

WHERE에서 FISH_TYPE을 그룹화해서 FISH_TYPE, MAX(LENGTH)를 출력하는 서브쿼리를 작성

해당 서브쿼리의 값들을 메인쿼리에 넣어줌

​

ORDER BY에서 ID를 기준으로 오름차순 정렬

SELECT ID, FISH_NAME, LENGTH
FROM FISH_INFO 
JOIN FISH_NAME_INFO USING (FISH_TYPE)
WHERE (FISH_TYPE, LENGTH) IN (
    SELECT FISH_TYPE, MAX(LENGTH)
    FROM FISH_INFO
    GROUP BY FISH_TYPE
)
ORDER BY ID;

GROUP BY

자동차 대여 기록에서 대여중/대여 가능 여부 구분하기(Lv3)

문제 설명

​

문제

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.

​

풀이

WITH에서 22년 10월 16일이 시작날짜와 반납날짜 사이에 있는 CAR_ID를 조회하는 구문을 생성

​

SELECT에서 유니크한 CAR_ID, CASE WHEN으로 '대여가능 여부'를 조회

​

ORDER BY에서 CAR_ID를 기준으로 내림차순 정렬

WITH RENT AS (
SELECT car_id
FROM car_rental_company_rental_history
WHERE '2022-10-16' BETWEEN start_date AND end_date)

SELECT DISTINCT(car_id),
    CASE
        WHEN car_id IN (
            SELECT car_id 
            FROM RENT
        ) THEN '대여중'
        ELSE '대여 가능'
        END availability
FROM car_rental_company_rental_history
ORDER BY 1 DESC;

IS NULL

잡은 물고기의 평균 길이 구하기(Lv1)

문제 설명

​

문제

잡은 물고기의 평균 길이를 출력하는 SQL문을 작성해주세요.

평균 길이를 나타내는 컬럼 명은 AVERAGE_LENGTH로 해주세요.

평균 길이는 소수점 3째자리에서 반올림하며, 10cm 이하의 물고기들은 10cm 로 취급하여 평균 길이를 구해주세요.

​

풀이

SELECT에서 IFNULL함수로 NULL값들을 10으로 변환시키고, 그 값으로 평균 길이를 구함

ROUND함수로 소수점 3째 자리에서 반올림하기 위해 ROUND( ,2)로 설정

칼럼명은 AVERAGE_LENGTH로 설정

SELECT ROUND(AVG(IFNULL(LENGTH, 10)), 2) AVERAGE_LENGTH
FROM FISH_INFO;

JOIN

오랜 기간 보호한 동물(1) (Lv3)

문제 설명

​

문제

아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.

​

풀이

SELECT에서 NAME, I.DATETIME(보호시작일)을 조회

​

JOIN에서 ANIMAL_ID를 기준으로 OUTS 테이블을 left join

​

WHERE에서 O.DATETIME이 NULL로 설정(입양을 못 간 동물이므로, INS 데이터만 존재해야함)

​

ORDER BY에서 보호 시작일을 오름차순 정렬

​

LIMIT 3으로 가장 오래 된 동물 3마리로 설정

SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE O.DATETIME IS NULL
ORDER BY I.DATETIME
LIMIT 3;

String, Date

자동차 대여 기록에서 장기/단기 대여 여부 구분하기(Lv1)

문제 설명

​

문제

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

​

풀이

SELECT에서 모든 칼럼들과 CASE WHEN으로 시작날과 반납날의 차이를 계산한 RENT_TYPE를 조회

DATEDIFF함수의 경우 두 날짜의 차이를 계산함

ex) 04-01과 04-01을 DATEDIFF 함수에 넣으면 0이 나옴. 즉 하루를 빼주므로 29를 입력해야 30일 이상을 구할 수 있다!

​

WHERE에서 START_DATE를 22년 9월로 설정

​

ORDER BY에서 대여기록 ID를 기준으로 내림차순 정렬

SELECT 
    HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE,'%Y-%m-%d') START_DATE, DATE_FORMAT(END_DATE,'%Y-%m-%d') END_DATE,
    CASE WHEN DATEDIFF(END_DATE,START_DATE) >= 29 THEN '장기 대여'
    ELSE '단기 대여'
    END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC;

'SQL > 프로그래머스' 카테고리의 다른 글

프로그래머스 | JOIN - 없어진 기록 찾기 (+JOIN정리)  (1) 2024.09.10
프로그래머스 | SQL 스터디 9  (1) 2024.09.03
프로그래머스 | SQL 스터디 7  (0) 2024.09.03
프로그래머스 | SQL 스터디 6  (0) 2024.09.03
프로그래머스 | SQL 스터디 5  (2) 2024.09.03
'SQL/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 | JOIN - 없어진 기록 찾기 (+JOIN정리)
  • 프로그래머스 | SQL 스터디 9
  • 프로그래머스 | SQL 스터디 7
  • 프로그래머스 | SQL 스터디 6
kimmalgu
kimmalgu
DA(데이터 분석가) 블로그
  • kimmalgu
    kimmalgu 님의 블로그
    kimmalgu
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • 통계 (3)
      • [패캠] 데이터분석 부트캠프 (10)
        • 프로젝트 (2)
        • 수업 정리 (8)
      • 파이썬 (8)
        • 통계전산처리 (7)
      • SQL (27)
        • 프로그래머스 (20)
        • HackerRank (5)
        • LeetCode (1)
      • 코테 (0)
      • 독후감 (5)
  • 블로그 메뉴

    • 글쓰기
    • 홈
    • 태그
    • 방명록
  • hELLO· Designed By정상우.v4.10.0
kimmalgu
프로그래머스 | SQL 스터디 8

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.