[MySQL] 프로그래머스 문제 연습 9

Lake·2024년 4월 30일
0

SQL 문제

목록 보기
12/36
post-thumbnail

조건에 맞는 도서 리스트 출력하기 (SELECT)

  • BOOK 테이블에서 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트를 찾아서 도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력하는 SQL문을 작성해주세요. 결과는 출판일을 기준으로 오름차순 정렬해주세요.

제출한 코드 :

SELECT BOOK_ID
       , DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK
WHERE (PUBLISHED_DATE LIKE "%2021%")
      AND (CATEGORY LIKE "%인문%")
ORDER BY PUBLISHED_DATE;

평균 일일 대여 구하기 (SELECT)

  • CAR_RENTAL_COMPANY_CAR 테이블에서 자동차 종류가 'SUV'인 자동차들의 평균 일일 대여 요금을 출력하는 SQL문을 작성해주세요. 이때 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림하고, 컬럼명은 AVERAGE_FEE 로 지정해주세요.

제출한 코드 :

SELECT ROUND(AVG(DAILY_FEE), 0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE IN("SUV");

다른 방법들(SELECT 이외의 부분은 모두 동일) :

TRUNCATE(컬럼명, 버릴 자릿수)
: 버림(일부 자릿수만을 유지)
: 두 번째 인자(버릴 자릿수)가 양수일 경우 소숫점 기준 오른쪽, 음수일 경우 왼쪽 버림

TRUNCATE(AVG(DAILY_FEE), 0)
CAST
  : 데이터 유형을 다른 데이터 유형으로 변환할 때 사용
CAST(AVG(DAILY_FEE) AS INTEGER) #정수로 변환

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

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

제출한 코드 :

SELECT U.USER_ID
       , U.NICKNAME
       , SUM(B.PRICE) AS "TOTAL_SALES"
FROM USED_GOODS_BOARD AS B
LEFT JOIN USED_GOODS_USER AS U
ON B.WRITER_ID = U.USER_ID # 작성자 ID가 곧 유저의 ID니이므로 조인 가능
WHERE B.STATUS IN("DONE")
GROUP BY U.USER_ID, U.NICKNAME
HAVING SUM(B.PRICE) >= 700000
ORDER BY TOTAL_SALES;

동일한 정보를 나타내는 경우에는 컬럼 이름이 다르더라도 조인할 수 있다.


가격대 별 상품 구하기 (GROUP BY)

  • PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.

제출한 코드 :

SELECT TRUNCATE(PRICE, -4) AS "PRICE_GROUP"
       , COUNT(PRODUCT_ID) AS "PRODUCTS"
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP;

다른 방법들(SELECT 이외의 부분은 모두 동일) :

TRUNCATE() 사용
TRUNCATE(PRICE, -4) AS "PRICE_GROUP"
FLOOR() 사용
: 인자로 전달된 숫자의 소수점 이하를 가장 가까운 정수로 반환하는 함수
FLOOR(PRICE/10000) * 10000 AS "PRICE_GROUP"
/*
(PRICE/10000)의 나머지는 버려지고 몫만 남게 되고, 
결과적으로 그 몫에 다시 10000을 곱해주어 구간 나누기
*/
DIV 사용
: 나눗셈을 수행한 후 소수점 이하를 버리고 정수 부분만을 반환하는 함수
(PRICE DIV 10000) * 10000 AS "PRICE_GROUP"
/*
PRICE를 10000으로 나눈 후 소수점 이하를 버리고, 
그 결과에 다시 10000을 곱해주어 구간 나누기
*/
% (나머지 연산자) 사용
: 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후 나머지를 반환
(PRICE - (PRICE % 10000)) "PRICE_GROUP"
/*
PRICE를 10000으로 나눈 후의 나머지를 구하고,
이를 PRICE에서 빼는 연산을 수행
-> 이를 통해 PRICE 값을 10000의 배수에 가장 가까운 값으로 반올림 가능
*/

3월에 태어난 여성 회원 목록 출력하기 (SELECT)

  • MEMBER_PROFILE 테이블에서 생일이 3월인 여성 회원의 ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성해주세요. 이때 전화번호가 NULL인 경우는 출력대상에서 제외시켜 주시고, 결과는 회원ID를 기준으로 오름차순 정렬해주세요.

제출한 코드 :

SELECT MEMBER_ID
       , MEMBER_NAME
       , GENDER
       , DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS "DATE_OF_BIRTH"
FROM MEMBER_PROFILE
WHERE DATE_FORMAT(DATE_OF_BIRTH, '%m') = '03'
      AND TLNO IS NOT NULL
      AND GENDER = 'W'
ORDER BY MEMBER_ID;
                    

오늘의 TMI

아침부터 굉장히 바쁘고 정신없었다..........
액땜했다 치지 뭐ㅋㅋㅋ 그래도 큰 일은 아니어서 다행이랄까.


아 그리고 레이니75 취소 시키고 다른 키보드 샀다...^^ 더 마음에 들고 가격도 싸고 배송도 내일이면 오는 키보드를 발견했기 때문 키키
빨리 왔으면 좋겠다.

0개의 댓글