본문 바로가기
프로그래밍 언어/SQL

[HACKERRANK] AVERAGE POPULATION

by gokite 2022. 1. 24.

https://www.hackerrank.com/challenges/average-population/problem?isFullScreen=true 

 

Average Population | HackerRank

Query the average population of all cities, rounded down to the nearest integer.

www.hackerrank.com

상당히 쉬운 문젠데 자꾸 비슷한 함수끼리 헷갈려서 정리해본다.

 

 

< 문제 >

인구 평균을 버림해서 정수로 값을 도출해라.

 

< 코드 답안 >

SELECT FLOOR(AVG(POPULATION))
FROM CITY

 

< 공부 >

 

> ROUND (값, 반올림해서 남길 자리 수) 

- 반올림할 때 사용하는 함수

- 값 뒤에 나오는 숫자는 반올림을 하는 위치가 아니라, 반올림을 해서 남길 숫자다

ㄴ ex) ROUND(3.141592, 2)

2번째 자리인 4에서 반올림을 하는 게 아니라, 두 번째 자리수까지 남게 그 뒤인 3번째에서 반올림을 한다.

해당 숫자는 다른 함수들에게도 똑같이 적용된다.

- 반올림해서 남길 자리수는 option 값이며 생략할 수 있다. 생략할 시 0으로 설정된다.

- 반올림해서 남길 자리의 수는 마이너스 수도 들어갈 수 있다. 

더 자세한 내용은 여기를 클릭

select round(3.141592) 
from dual
> 3
select round(3.141592, 2)
from dual
> 3.14

 

* ROUND 함수에 마이너스 수가 들어갈 때

- 소숫점 이하를 버리고 정수에 뒤에서부터 지정된 자릿수까지 반올림

 

ex) ROUND(-314.1592, -1)

- 소수점 1592를 버리고 -314에서 뒤에서 첫번째 자리인 4에서 반올림. 4니까 버려야하고 -310이 나온다

 

ex) ROUND(-316.1592, -1)

- 소수점 1592를 버리고, 뒤에서 첫번째 자리인 6에서 반올림. 6이니까 올림하면, 320이 나옴다. 

 

ex) ROUND(-314.1592, -2)

- 소수점 1592를 버리고, -2 자리인 1에서 반올림, 1이니까 버리고 -300

 

ex) ROUND(-364.1592, -2)

- 소수점 1592를 버리고, -2자리인 6에서 반올림,  6이니까 올리고 -400

 

 

> CEIL(값)

- 올림 함수

- 값보다 큰 정수 중 가장 작은 수를 가져오는 함수로써 소수점을 모두 올림

ㄴ 3.14 값 보다 가장 큰 정수들 -> 4,5,6,7,8,9 여러개 있을 텐데 여기서 가장 작은 수인 4

SELECT CEIL(3.141592)
FROM DUAL
> 4

 

SELECT CEIL(-3.141592)
FROM DUAL
> -3

 

*유의할

SELECT CEIL(3.0)
FROM DUAL
> 3
SELECT CEIL(3.0000000001)
FROM DUAL
> 4

3.0을 올림했을 땐 3이 나온다. 그러나 3.00001을 올림할 땐 4로 올림한다. 

(당연한 사실이지만..헷갈리니 주의하도록 하자)

 

 

> FLOOR(값)

- 버림 함수

- 값보다 작은 정수 중 가장 큰 수를 가져오며 실수를 무조건 버림(음수일 경우 내림)

ㄴ 3.14보다 작은 정수들은 3,2,1,0,-1 등 있을텐데 여기서 가장 큰 수인 3!

SELECT FLOOR(3.141592)
FROM DUAL
> 3

 

SELECT FLOOR(-3.141592)
FROM DUAL
> -4

 

*CEIL가 유의할 점이 비슷하다. FLOOR(3.0)은 3이다. FLOOR(2.999999)는 2다.

 

 

 

> TRUNCATE(값, 버리고 남길 자리 수)

- FLOOR와 같이 버림 함수이다. 그러나 TRUNCATE는 소수점 부분을 단순히 잘라서 날려버린다. 그래서 양수나 음수 모두 TRUNCATE 시 정수만 남는다. FLOOR는 지정된 수보다 작은 정수 중 가장 큰 수를 가져온다. 즉 양수일때는 TRUNCATE와 FLOOR는 자리 수를 설정할 수 있다는 점을 제외하고 차이가 없지만, 음수일 땐 결과 값 자체가 다르가 나타난다. (이해가 안된다면 맨 아래 예제를 보자)

SELECT TRUNCATE(3.141592,2)
FROM DUAL
> 3.14

 

 

< TRUNCATE 와 FLOOR 차이 예제 >

<양수일 때> FLOOR TRUNCATE
수식 SELECT FLOOR(3.14) SELECT TRUNCATE(3.14, 0)
결과값 3 3
<음수일 때> FLOOR TRUNCATE
수식 SELECT FLOOR(-3.14) SELECT TRUNCATE(-3.14, 0)
결과값 -4 -3

 

 

참고 사이트

:https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=monkeychoi&logNo=220517384249

https://m2seo.tistory.com/27