출처 : https://gent.tistory.com/516
SQL Server에서는 비율, 백분율(%)을 구하기 위해서는 OVER 절을 사용하여 전체 합계를 구한다면 연산을 하면 쉽게 해당 값을 구할 수 있다. 오라클의 RATIO_TO_REPORT 함수와 같은 비율을 구하는 함수가 존재하지 않기 때문에 직접 연산식을 만들어야 한다. 아래의 예제를 충분히 이해하면 쉽게 문제를 해결할 수 있을 것이다.
MSSQL 비율, 백분율 구하기
목차 |
비율 구하기
SELECT ename
, sal
, CONVERT(float, sal) / SUM(sal) OVER() AS sal_ratio
FROM emp
WHERE job = 'SALESMAN'
비율 = 자신의 값 / 전체 합계
CONVER(float, sal)
MSSQL에서는 정수(피제수)와 정수(제수)를 나누면 소수점 이하의 값이 반환되지 않는다. 피제수와 제수 중 하나 이상의 값을 실수(소수점)로 형 변환을 하고 연산을 해야 소수점 이하의 값을 반환받을 수 있다.
SUM(sal) OVER()
OVER 절을 사용하면 조회된 전체 데이터의 합계를 구할 수 있다.
백분율(%) 구하기
SELECT ename
, sal
, ROUND(CONVERT(float, sal) / SUM(sal) OVER(), 2) * 100 AS sal_percent
FROM emp
WHERE job = 'SALESMAN'
백분율(%) = 자신의 값 / 전체 합계 * 100
ROUND(비율, 2) * 100
비율의 소수점 2자리까지 반올림하여 자른 다음 100으로 곱하면 백분율을 구할 수 있다.
ROUND(비율 * 100, 2)와 동일한 결과를 얻을 수 있다.
(활용 예제) 그룹별 백분율(%) 구하기
직업 그룹별 급여 백분율(%) 구하기
SELECT job
, sum_sal
, ROUND(CONVERT(float, sum_sal) / SUM(sum_sal) OVER(), 2) * 100 AS sal_percent
FROM (
SELECT job
, SUM(sal) AS sum_sal
FROM emp
GROUP BY job
) AS emp_job
직업(job)별로 합산을 인라인 뷰로 사용하여 다시 한번 연산을 하면 직업별로 백분율을 구할 수 있다.
직업 그룹별 급여 백분율(%) 및 합계 표시하기
SELECT IIF(GROUPING_ID(job) = 1, '합계', job) AS job
, SUM(sal) AS sum_sal
, CONCAT(ROUND(SUM(sal) / MAX(total_sal), 2) * 100, '%') AS sal_percent
FROM (
SELECT job
, CONVERT(float, sal) AS sal
, SUM(sal) OVER() AS total_sal
FROM emp
) AS emp_job
GROUP BY ROLLUP(job)
ROLLUP를 사용하여 전체 합계 및 전체 백분율을 표시할 수 있다.
CONCAT(백분율, '%')
CONCAT 함수를 사용하면 백분율 값에 '%' 문자를 쉽게 붙일 수 있다. (예, 21%, 100%)
'SQL' 카테고리의 다른 글
[MSSQL] 0으로 나누기 오류 발생2 (0) | 2023.10.27 |
---|---|
[MSSQL] MERGE를 사용하여 데이터 입력/수정/삭제를 한 번에 처리 (0) | 2023.08.30 |
[MSSQL] REPLICATE 동일한문자(문자열) 반복하기 (1) | 2022.08.31 |
[MSSQL] 정렬 order by 영문 한글 섞여있을때 (0) | 2022.06.28 |
[MSSQL] 쿼리문 테이블명 빨간 줄 발생 시 해결 방법 (0) | 2022.02.22 |