오늘 알아볼 함수는 REPLACE이다.
REPLACE(문자열, 'A', 'B')
위와 같은 형태로 사용하며, 반드시 '문자'에 대해서만 쓸 수 있다. 문자열 내의 'A'가 있다면 'B'로 바꿔준다.
예를 들어 'APP'에 대해 바꿔준다면 'BPP'로 바뀌는 식이다.
그럼 이를 응용해서, 어떤 문자를 없애주는 것도 가능하다. 'A'를 ''(공백)으로 바꿔주면 'APP' → 'PP'가 된다.
직접 문제를 풀어보며 적용해보자.
Q. 사만다는 [EMPLOYEES] 테이블에 있는 직원들의 월평균 임금(Salary)을 계산하려고 한다. (문제 바로가기)
Q. 그런데 그녀의 키보드에서 숫자 0 key가 고장나버려서, Salary에 있는 0 값이 모두 사라져버렸다. 예를 들어 누군가의 월급이 550890이었다면, 5589로 나오게 되었다.
그래서 당신에게 도움을 요청했다. 정확한 월평균 임금과, 사만다가 잘못 구한 월평균 임금의 차이를 SQL으로 계산하여라.
예를 들어 이게 원본 데이터라면,
사만다가 잘못 계산한 데이터는 이렇다.
SQL 답안
일단은 사만다가 잘못 구한 데이터를 만들어야 한다. 여기서는 Salary 열의 0이 사라졌다고 했으므로,
SELECT REPLACE(SALARY, 0, '')
FROM EMPLOYEE
위처럼 구한다면 Salary 열의 0이 모두 공백으로 사라질 것이다.
단 주의할 점은 Salary 열은 지금 숫자라는 것이다. 그래서 CAST 함수를 사용하여, 문자열로 바꿔준다.
SELECT REPLACE(CAST(SALARY AS CHAR), '0', '')
FROM EMPLOYEE
문자이므로, 당연히 숫자 0도 '0' 으로 따옴표를 붙여주어야 한다.
다음으로는 월평균 Salary를 구해보자. 이는 집계함수 AVG(평균)을 사용하면 간단하다.
SELECT AVG(REPLACE(CAST(SALARY AS CHAR), '0', ''))
FROM EMPLOYEE
위처럼 구하면 사만다가 잘못 구한 월평균 임금이 나온다.
이제 정확한 월평균 임금을 구해 둘을 빼주면 끝!
SELECT CEIL(AVG(SALARY) - AVG(REPLACE(CAST(SALARY AS CHAR), '0', '')))
FROM EMPLOYEE
평균끼리의 뺄셈이므로 소숫점이 나올 수 있다. 문제에서는 무조건 자연수로 올림하라고 했으므로 CEIL이라는 올림 함수를 사용했다.
반응형
'Skillset > SQL' 카테고리의 다른 글
파이썬에서 SQL parameter 설정하기 (Python SQL formatter) (2) | 2022.09.20 |
---|---|
[Python, Redshift] 파이썬에 AWS Redshift 연결하여 사용하는 방법 (1) | 2022.09.19 |
SQL로 깔끔한 문장 출력하기 (CONCAT 활용) (0) | 2022.08.10 |
SQL 중첩된 CASE WHEN 구문 활용: 삼각형의 타입 구분하기 (0) | 2022.08.09 |
SQL 특정 문자들로 시작 or 끝나는 도시 출력하기 (0) | 2022.08.08 |