[MSSQL] 비율, 백분율(퍼센트) 구하기

SQL Server에서는 비율, 백분율(%)을 구하기 위해서는 OVER 절을 사용하여 전체 합계를 구한다면 연산을 하면 쉽게 해당 값을 구할 수 있다. 오라클의 RATIO_TO_REPORT 함수와 같은 비율을 구하는 함수가 존재하지 않기 때문에 직접 연산식을 만들어야 한다. 아래의 예제를 충분히 이해하면 쉽게 문제를 해결할 수 있을 것이다.

 

MSSQL 비율, 백분율 구하기

목차
  1. 비율 구하기
  2. 백분율(%) 구하기
  3. (활용 예제) 그룹별 백분율(%) 구하기

 

비율 구하기

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%)

예제쿼리(테이블포함).txt
0.00MB

 

 

[MSSQL] IIF 함수 사용법 (CASE, DECODE)

SQL Server 2012 버전부터 IIF 함수가 추가되었다. CASE 문을 사용하면 쿼리문이 조금 복잡해지는 부분이 있는데 2가지의 값만 리턴이 필요하다면 IIF 함수가 조금 더 효율적일 수 있다. 오라클의 DECODE

gent.tistory.com

 

[MSSQL] 문자열 합치기 (CONCAT, +)

SQL Server에서 문자열을 합칠 때는 CONCAT 함수와 더하기(+) 연산자를 사용한다. 문자열을 합칠 때는 되도록이면 CONCAT 함수를 사용할 것을 권장하지만, 더하기 연산자를 사용하는 것이 더 익숙하기

gent.tistory.com

 

[MSSQL] ROLLUP 사용법 (소계, 합계)

SQL Server에서 그룹 함수로 집계된 데이터에서 소계, 합계를 쉽게 구하기 위해서는 ROLLUP를 사용하면 된다. 아래의 예제를 참고하면 쉽게 이해할 수 있다. ROLLUP은 2가지 사용방법이 있다. 어느 것을

gent.tistory.com

 

[MSSQL] 합계 구하는 3가지 방법 (SUM 함수)

SQL Server에서 합계를 구하기 위해서는 SUM 함수를 사용하면 됩니다. SUM 함수를 사용하여 합계를 구하면 조회된 각 행에 합계를 표시할 수 있으며, 별도의 새로운 행으로 합계를 표시하고 싶을 때

gent.tistory.com

 

댓글

Designed by JB FACTORY