Programmers SQL 문제 풀기

나나·2025년 5월 4일
0

SELECT: 어린 동물 찾기

문제

동물 보호소에 들어온 동물 중

  • 젊은 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요.
  • 이때 결과는 아이디 순으로 조회해주세요.

코드

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS 
WHERE INTAKE_CONDITION NOT IN ('Aged')
ORDER BY ANIMAL_ID

설명

젊은 동물이므로 INTAKE_CONDITION이 'Aged'가 아니면 되는 것입니다.

SELECT: 동물의 아이디와 이름

문제

  • 동물 보호소에 들어온 모든 동물의 아이디와 이름을
  • ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요.

코드

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID;

설명

ORDER BY만 써주면 되는 간단한 문제입니다.

SELECT: 여러 기준으로 정렬하기

문제

  • 동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요.
  • 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.

코드

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS 
ORDER BY NAME, DATETIME DESC;

설명

이 문제 역시 ORDER BY를 써주면 되는 문제입니다. 이름이 같다면 보호를 나중에 시작한 동물이므로 DATETIME에 관해서는 내림차순으로 정렬합니다.

GROUP BY: 조건에 맞는 사용자와 총 거래금액 조회하기

⭐⭐⭐

문제

USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서

  • 완료된 중고 거래의
  • 총금액이 70만 원 이상인 사람의
  • 회원 ID, 닉네임, 총거래금액을 조회하는 SQL문을 작성해주세요.
  • 결과는 총거래금액을 기준으로 오름차순 정렬해주세요.

코드

-- 코드를 입력하세요
SELECT U.USER_ID, U.NICKNAME, SUM(B.PRICE) AS TOTAL_SALES
FROM USED_GOODS_BOARD AS B JOIN USED_GOODS_USER AS U ON B.WRITER_ID = U.USER_ID
WHERE STATUS = 'DONE'
GROUP BY B.WRITER_ID
HAVING SUM(B.PRICE) >= 700000
ORDER BY TOTAL_SALES;

설명

WHERE절에서는 완료된 중고 거래이므로, 조건을 필터링합니다.
또한 사용자별 총 금액을 계산하기 위해 GROUP BY하고 HAVING절에서 집계 함수를 사용합니다.

STRING, DATE: 자동차 대여 기록에서 장기/단기 대여 구분하기

문제

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서

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

코드

-- 코드를 입력하세요
SELECT HISTORY_ID, CAR_ID, 
    DATE_FORMAT(START_DATE, "%Y-%m-%d") AS START_DATE,
    DATE_FORMAT(END_DATE, "%Y-%m-%d") AS END_DATE,
    IF((DATEDIFF(END_DATE, START_DATE)+1)>=30, '장기 대여', '단기 대여') AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
WHERE START_DATE BETWEEN '2022-09-01' AND '2022-09-30'
ORDER BY HISTORY_ID DESC;

업로드중..

설명

WHERE절에서 대여 시작일이 2022년 9월에 속하는 경우를 필터링합니다.
또한 RENT_TYPE을 파생변수로 생성하기 위해 IF함수를 사용했습니다. 만약 END_DATE와 START_DATE의 차이+1이 30일 이상이면 '장기 대여' 아니면 '단기 대여'로 표시하도록 설정했습니다.

profile
데이터에서 의사결정으로

0개의 댓글