문제 설명
다음은 식당의 정보를 담은 REST_INFO 테이블과 식당의 리뷰 정보를 담은 REST_REVIEW 테이블입니다. REST_INFO테이블은 다음과 같으며 REST_ID, REST_NAME, FOOD_TYPE, VIEWS, FAVORITES, PARKING_LOT, ADDRESS, TEL은 식당 ID, 식당 이름, 음식 종류, 조회수, 즐겨찾기수, 주차장 유무, 주소, 전화번호를 의미합니다.
Column name | Type | Nullable |
REST_ID | VARCHAR(5) | FALSE |
REST_NAME | VARCHAR(50) | FALSE |
FOOD_TYPE | VARCHAR(20) | TRUE |
VIEWS | NUMBER | TRUE |
FAVORITES | NUMBER | TRUE |
PARKING_LOT | VARCHAR(1) | TRUE |
ADDRESS | VARCHAR(100) | TRUE |
TEL | VARCHAR(100) | TRUE |
REST_REVIEW 테이블은 다음과 같으며 REVIEW_ID, REST_ID, MEMBER_ID, REVIEW_SCORE, REVIEW_TEXT,REVIEW_DATE는 각각 리뷰 ID, 식당 ID, 회원 ID, 점수, 리뷰 텍스트, 리뷰 작성일을 의미합니다.
Column name | Type | Nullable |
REVIEW_ID | VARCHAR(10) | FALSE |
REST_ID | VARCHAR(10) | TRUE |
MEMBER_ID | VARCHAR(100) | TRUE |
REVIEW_SCORE | NUMBER | TRUE |
REVIEW_TEXT | VARCHAR(1000) | TRUE |
REVIEW_DATE | DATE | TRUE |
문제
REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.
SELECT
RI.REST_ID,
RI.REST_NAME,
RI.FOOD_TYPE,
RI.FAVORITES,
RI.ADDRESS,
ROUND(AVG(RR.REVIEW_SCORE),2) AS SCORE
FROM
REST_REVIEW RR
LEFT JOIN REST_INFO RI
ON RI.REST_ID = RR.REST_ID
WHERE
RI.ADDRESS LIKE "서울%"
GROUP BY
RI.REST_ID,
RI.REST_NAME,
RI.FOOD_TYPE,
RI.FAVORITES,
RI.ADDRESS
ORDER BY
AVG(RR.REVIEW_SCORE) DESC,
RI.FAVORITES DESC
학습
MySQL 소수점 관련 주요 함수
1. ROUND(X[, D])
- 설명: 숫자 X를 소수점 D 자리까지 반올림.
-- ROUND(반올림) 예시
SELECT ROUND(123.4567, 2);
-- 결과: 123.46 SELECT ROUND(123.4567); -- 결과: 123 (D 생략 시 0자리)
2. TRUNCATE(X, D)
- 설명: 숫자 X를 소수점 D 자리까지만 남기고 나머지는 버림 (반올림 아님).
--TRUNCATE(버림) 예시
SELECT TRUNCATE(123.4567, 2);
-- 결과: 123.45
3. CEIL(X) 또는 CEILING(X)
- 설명: 숫자 X를 올림해서 정수로 반환.
-- CEIL,CELING(올림&정수) 예시
SELECT CEIL(123.45); -- 결과: 124
SELECT CEILING(-1.2); -- 결과: -1
4. FLOOR(X)
- 설명: 숫자 X를 내림해서 정수로 반환.
-- FLOOR(내림&정수) 예시
SELECT FLOOR(123.45); -- 결과: 123
SELECT FLOOR(-1.2); -- 결과: -2
5. FORMAT(X, D)
- 설명: 숫자 X를 소수점 D자리까지 문자열로 포맷 (천 단위 콤마 포함).
-- FORMAT(문자열로 변환) 예시
SELECT FORMAT(12345.6789, 2);
-- 결과: '12,345.68'
6. MOD(X, Y) 또는 X % Y
- 설명: X를 Y로 나눈 나머지를 반환. 소수 연산도 가능.
-- MOD(나눈나머지) 예시
SELECT MOD(10.5, 3); -- 결과: 1.5
7. CAST(X AS DECIMAL(D1, D2))
- 설명: 숫자 X를 소수점 자리수 지정해 DECIMAL 형식으로 캐스팅.
--CAST(형변환) 예시
SELECT CAST(123.456 AS DECIMAL(6,2));
-- 결과: 123.46
📘 DECIMAL(6,2)의 의미
전체 자리수 | 6 | 소수점 포함한 전체 자릿수 (정수 + 소수) |
소수 자리수 | 2 | 소수점 이하 자릿수 |
정수 자리수 | 4 | 6 - 2 = 4 (소수점 앞 자릿수 최대 4자리까지 가능) |
보너스: 소수점 조작 시 자주 쓰이는 조합
-- 소수점 둘째 자리까지 반올림 후 정수로
SELECT FLOOR(ROUND(123.456, 1)); -- 결과: 123
-- 소수점 아래 3자리까지 잘라내기 (반올림 없이)
SELECT TRUNCATE(987.654321, 3); -- 결과: 987.654
'코딩테스트 > SQL' 카테고리의 다른 글
SELECT > 재구매가 일어난 상품과 회원 리스트 구하기 / SQL HAVING절 예제 (0) | 2025.03.25 |
---|---|
[프로그래머스] String, Date 〉Lv2. DATETIME에서 DATE로 형 변환 (0) | 2021.10.29 |
[프로그래머스] String, Date 〉Lv3. 오랜 기간 보호한 동물(2) (0) | 2021.10.28 |
[프로그래머스] String, Date 〉Lv2. 중성화 여부 파악하기 (0) | 2021.10.27 |
[프로그래머스] String, Date 〉Lv2. 이름에 el이 들어가는 동물 찾기 (0) | 2021.10.26 |
댓글