/////
Search
Duplicate

The Blunder

태그
Aggregate Function
String
한 번 더 체크

문제

Samantha was tasked with calculating the average monthly salaries for all employees in the EMPLOYEES table, but did not realize her keyboard's  key was broken until after completing the calculation. She wants your help finding the difference between her miscalculation (using salaries with any zeros removed), and the actual average salary.
Write a query calculating the amount of error (i.e.:  average monthly salaries), and round it up to the next integer.
Input Format
The EMPLOYEES table is described as follows:
Note: Salary is per month.
Constraints
1000<Salary<1051000 < Salary < 10^5

예시

Sample Input
Sample Output
2061
SQL
복사

정답

SELECT CEIL(AVG(Salary)-AVG(CONVERT(REPLACE(Salary,0,''),FLOAT))) FROM EMPLOYEES;
SQL
복사

풀이

데이터의 형식을 변환하는 방법과 REPLACE() 함수, CEIL() 함수에 관하여 물어보는 문제이다.
우선 Salary 필드에서 0을 지워야 하기 때문에 REPLACE() 함수를 통해서 0을 빈칸인 ‘’로 대체한다. 이때 Salary 필드는 Numeric인데, REPLACE() 함수를 통해 빈칸을 채워넣었기 때문에 문자열로 바뀐다.
REPLACE(Salary,0,'')
SQL
복사
평균을 계산하기 위해서는 데이터의 형식이 Numeric이어야 하기 때문에 CONVERT()함수를 통해서 FLOAT 타입으로 변경해준다.
CONVERT(REPLACE(Salary,0,''),FLOAT)
SQL
복사
그 다음 평균을 구해주는 함수인 AVG() 함수를 통해 평균을 구해주고, 마지막으로 Actual에서 Miscalculation을 빼준 다음, “round it up” 즉, 올림을 해준다.
CEIL(AVG(Salary)-AVG(CONVERT(REPLACE(Salary,0,''),FLOAT)))
SQL
복사