SQL

SQL 코드카타 오답: ROUND | HAVING과 WHRE | FLOOR | MONTH

sawo11 2024. 12. 2. 19:45

[평균 일일 대여 요금 구하기]

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

-- 반올림: ROUND()
SELECT ROUND(AVG(DAILY_FEE), 0) AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV';

 

[조건에 맞는 사용자와 총 거래금액 구하기]

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

-- HAVING, WHERE 구분하기!
SELECT u.USER_ID,
    u.NICKNAME,
    SUM(b.PRICE) TOTAL_SALES
FROM USED_GOODS_BOARD b
JOIN USED_GOODS_USER u ON b.WRITER_ID = u.USER_ID
WHERE b.STATUS = 'DONE'
GROUP BY u.USER_ID
HAVING SUM(B.PRICE) >= 700000
ORDER BY TOTAL_SALES;

 

[가격대 별 상품 개수 구하기]

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

-- FLOOR: 내림
-- PRICE를 10,000으로 나누고 소수점 아래를 내림 처리한 후 다시 10,000을 곱하여 가격대 구하기
SELECT FLOOR(PRICE / 10000) * 10000 AS PRICE_GROUP,
       COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY FLOOR(PRICE / 10000)
ORDER BY PRICE_GROUP;

 

[3월에 태어난 여성 회원 목록 출력하기]

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

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

 

[즐겨찾기가 가장 많은 식당 정보 출력하기]

REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.

-- 내가 짠 쿼리
-- HAVING을 사용할 때 조건을 명시해야함 ex.HAVING MAX(FAVORITES) > 0
SELECT FOOD_TYPE,
    REST_ID,
    REST_NAME,
    MAX(FAVORITES) FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
HAVING MAX(FAVORITES)
ORDER BY FOOD_TYPE DESC;

-- 정답
-- WHERE절에서 사용하는 서브쿼리(비교 연산자)
SELECT R.FOOD_TYPE,
    R.REST_ID,
    R.REST_NAME,
    R.FAVORITES
FROM REST_INFO R
WHERE R.FAVORITES = (
    SELECT MAX(F.FAVORITES)
    FROM REST_INFO F
    WHERE F.FOOD_TYPE = R.FOOD_TYPE
)
ORDER BY R.FOOD_TYPE DESC;

 

 

[식품분류별 가장 비싼 식품의 정보 조회하기]

FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.

-- WHERE절에서 사용하는 서브쿼리 비교 연산자ver.
SELECT F.CATEGORY,
    F.PRICE MAX_PRICE,
    F.PRODUCT_NAME
FROM FOOD_PRODUCT F
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
    AND F.PRICE = ( -- 카테고리별 최댓값 구하기
        SELECT MAX(P.PRICE)
        FROM FOOD_PRODUCT P
        WHERE F.CATEGORY = P.CATEGORY
        GROUP BY CATEGORY
        )
ORDER BY MAX_PRICE DESC;

 

[5월 식품들의 총매출 조회하기]

FOOD_PRODUCT와 FOOD_ORDER 테이블에서 생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 SQL문을 작성해주세요. 이때 결과는 총매출을 기준으로 내림차순 정렬해주시고 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬해주세요.

-- 문제 잘 읽기 *총매출*
SELECT P.PRODUCT_ID,
    P.PRODUCT_NAME,
    SUM(O.AMOUNT * P.PRICE) TOTAL_SALES
FROM FOOD_PRODUCT P
JOIN FOOD_ORDER O 
ON P.PRODUCT_ID = O.PRODUCT_ID
WHERE DATE_FORMAT(O.PRODUCE_DATE, '%Y-%m') = '2022-05'
GROUP BY P.PRODUCT_ID
ORDER BY TOTAL_SALES DESC,
    P.PRODUCT_ID;