MYSQL/HakerRank_Easy

The Blunder 와 Replace

수스리 2025. 4. 5. 15:03

문제

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.

사만다는 EMPLOYEE 테이블에 있는 전 직원의 평균 급여를 계산하는 업무를 맡았지만 계산이 끝날때 까지 키보드 0키가 고장 났다는 걸 몰랐다. 그녀는 실제 평균 급여와 0이 빠진 급여 평균의 차이를 구하는대 당신에게 도움을 청하고 있습니다. 오차 금액을 계산하는 쿼리를 작성하고 그 결과를 올림하여 정수로 출력하세요

EMPLOYEES 테이블

정답 쿼리

SELECT  
        CEIL(AVG(SALARY)- AVG(CAST((REPLACE(CAST(Salary AS CHAR) , '0', '')) AS UNSIGNED)))
FROM 
        EMPLOYEES

 

결론부터 말하면 이 문제는 틀렸다. RELPACE 함수를 몰랐기 때문이다. 

REPLACE

기본 문법

REPLACE(원본문자열, 바꿀문자, 새문자)

원본문자열 : 문자열 또는 문자열로 변형된 컬럼

바꿀문자 : 찾아서 바꾸고 싶은 문자 또는 문자열

새문자 : 대체할 문자 또는 문자열

 

SELECT REPLACE('102030', '0', '') AS result;
-- 결과: '123'
SELECT REPLACE('hello world', 'l', '*') AS result;
-- 결과: 'he**o wor*d'

 

REPLACE(CAST(Salary AS CHAR) , '0', '')는 Salary를 문자열로 바꿔 0을 ''빈 문자열로 대체한다. CAST((REPLACE(CAST(Salary AS CHAR) , '0', '')) AS UNSIGNED)) 그런다음 다시한번 정수형으로 형 변환을 해서 

AVG(CAST((REPLACE(CAST(Salary AS CHAR) , '0', '')) 평균값을 씌운다. 

 

여기서 깨알 영어 상식

나는 round up이 올림 down이 내림 round가 반올림 인 줄 몰랐다. 

round up 올림이므로 CELI를 써서 올림을 했다.

📚 표현 정리

한국어영어 표현설명
올림 round up / ceil / ceiling 소수점이 있으면 무조건 위 정수로 올림
내림 round down / floor 소수점 이하는 버리고 아래 정수로 내림
반올림 round (to nearest) 일반적인 반올림 (예: 4.5 → 5, 4.4 → 4)