• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

섹션3. Weather Observation Station 18 문제 관련

23.06.29 23:05 작성 23.06.29 23:06 수정 조회수 203

0

안녕하세요.

강의 잘 듣고 있습니다.

하나 궁금해서 문의드려요.

SELECT ROUND(ABS(MIN(LAT_N)-MAX(LAT_N)) + ABS(MIN(LONG_W)-MAX(LONG_W)),4)
FROM STATION

Weather Observation Station 18 문제 위에 해답처럼 잘 풀었는데

WITH STEP_01 AS
(
SELECT MIN(LAT_N) AS a, MIN(LONG_W) AS b, MAX(LAT_N) AS c, MAX(LONG_W) AS d
FROM STATION
)
,
STEP_02 AS
(
SELECT ABS(a-c)+ABS(b-d) AS U
FROM STEP_01
)

SELECT ROUND(U, 4)
-- SELECT CAST(ROUND(U, 4) AS DECIMAL(10, 4))
-- SELECT FORMAT(U, '#.####')
-- SELECT FORMAT(U, '0.0000')
FROM STEP_02

복습하는 과정에서 서브쿼리 만들면서 STEP별로 진행해 보았는데

SELECT ROUND(U, 4)
FROM STEP_02

로 했을 때 저렇게 소수점 자리가 절삭되지 않는 현상은 어떤 문제 때문인지 궁금해서요.

그래서 FORMAT이나 CAST AS DECIMAL로 다시 변환하면 정답이 되기는 하는데,

오류가 어디서 발생되는 건지 궁금해서 문의드렸어요!!

답변 2

·

답변을 작성해보세요.

0

혹시 MySQL이 아닌 다른 DBMS에서 실행하셨나요?
DBMS에 따라 문법이 조금씩 상이하므로 CAST나 FORMAT을 해 줘야 할 수도 있습니다.
작성해 주신 쿼리를 제가 MySQL 환경에서 실행해 봤을 때는 문제 없이 소수점 이하 4자리까지 출력되어 정답 처리 되었습니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.01

안녕하세요, 인프런 AI 인턴이에요.

STEP_02 쿼리에서 SELECT ROUND(U, 4)을 사용하면 소수점 자리가 절삭되지 않는 현상이 발생하는 이유는, ROUND 함수를 사용하여 U 값을 소수점 4자리로 반올림하고 있기 때문입니다. 따라서 소수점 자리가 절삭되지 않도록 반올림한 값을 출력하게 됩니다.

만약 소수점 자리를 절삭하지 않고, 원래의 형식을 유지하고 싶다면, SELECT 문에서 CAST를 사용하여 U 값을 DECIMAL(10, 4) 형식으로 변환하여 출력하면 됩니다. 즉, SELECT CAST(ROUND(U, 4) AS DECIMAL(10, 4)) 형태로 쿼리를 작성하면 됩니다.

또는, FORMAT 함수를 사용하여 U 값을 원하는 형식으로 변환할 수도 있습니다. 예를 들어, SELECT FORMAT(U, ‘#.####’) 혹은 SELECT FORMAT(U, ‘0.0000’) 형태로 쿼리를 작성하면 U 값을 소수점 4자리까지 출력할 수 있습니다.

이처럼, 소수점 자리를 절삭하지 않고 원하는 형식으로 출력하려면 ROUND 함수의 결과를 적절히 변환하여 사용하면 됩니다.

더 궁금한 점이 있다면 언제든지 문의해주세요. 좋은 하루 되세요!