SQL을 사용하여 평균, 중앙값 및 최빈값 찾기.

다양한 분석 작업을 위해 데이터의 평균을 계산해야 하는 경우가 매우 많습니다. 내장 함수의 도움으로 Excel과 같은 도구에서 평균, 중앙값 및 모드를 계산할 때 매우 쉽습니다.

이 블로그에서는 SQL만 사용하여 이러한 값을 계산하는 방법에 대해 설명합니다.

모든 부서에 대해 부서별 평균, 중앙값 및 급여 모드를 찾기 위해 아래 표를 고려하십시오.

╔═══════╦════════╦════════╗
║ empid ║ deptid ║ salary ║
╠═══════╬════════╬════════╣
║ 1     ║ 1      ║ 12000  ║
╠═══════╬════════╬════════╣
║ 2     ║ 2      ║ 3400   ║
╠═══════╬════════╬════════╣
║ 3     ║ 3      ║ 45000  ║
╠═══════╬════════╬════════╣
║ 4     ║ 4      ║ 1320   ║
╠═══════╬════════╬════════╣
║ 5     ║ 4      ║ 5600   ║
╠═══════╬════════╬════════╣
║ 6     ║ 2      ║ 2700   ║
╠═══════╬════════╬════════╣
║ 7     ║ 1      ║ 12000  ║
╠═══════╬════════╬════════╣
║ 8     ║ 3      ║ 34000  ║
╠═══════╬════════╬════════╣
║ 9     ║ 4      ║ 4600   ║
╠═══════╬════════╬════════╣
║ 10    ║ 1      ║ 9000   ║
╠═══════╬════════╬════════╣
║ 11    ║ 1      ║ 13000  ║
╠═══════╬════════╬════════╣
║ 12    ║ 2      ║ 12000  ║
╠═══════╬════════╬════════╣
║ 13    ║ 4      ║ 1320   ║
╠═══════╬════════╬════════╣
║ 14    ║ 3      ║ 24000  ║
╠═══════╬════════╬════════╣
║ 15    ║ 3      ║ 45000  ║
╠═══════╬════════╬════════╣
║ 16    ║ 2      ║ 3400   ║
╠═══════╬════════╬════════╣
║ 17    ║ 2      ║ 1230   ║
╠═══════╬════════╬════════╣
║ 18    ║ 1      ║ 15000  ║
╚═══════╩════════╩════════╝


평균은 부서의 모든 급여의 평균일 뿐이므로 AVG 기능을 사용할 수 있으므로 찾기가 매우 쉽습니다.

SELECT deptid
    ,AVG(SALARY) AS mean_salary
FROM employee
GROUP BY deptid


각 부서의 급여 계산 모드는 SQL 함수가 내장되어 있지 않기 때문에 약간 까다로울 것입니다.

이에 대한 단계는 다음과 같습니다.
  • 이를 위해 각 부서의 고유 급여에 대한 급여 수를 계산하는 것으로 시작합니다.
  • 그런 다음 각 부서의 빈도(급여 수)에 따라 급여 순위를 매깁니다.

  • salary_counts AS (
        SELECT deptid,
            salary,
            COUNT(salary) AS salary_counts
        FROM employee 
        GROUP BY deptid, salary 
    )
    -- ranking salaries by frequency
    , mode_salaries AS (
        SELECT deptid,
            salary,
            RANK() OVER( PARTITION BY deptid ORDER BY salary_counts DESC ) AS salary_counts_rank
        FROM salary_counts
    )
    SELECT deptid,
        salary as mode_salary
    FROM mode_salaries
    WHERE salary_counts_rank = 1
    


    각 부서의 급여 중앙값을 계산할 때 GROUP과 함께 PERCENTILE_DISC SQL 함수를 사용하면 이를 계산하는 데 도움이 됩니다.

    median_salaries AS (
        SELECT deptid,
            PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY salary) AS median_salary
        FROM employee
        GROUP BY deptid
    )
    SELECT deptid,
        median_salary 
    FROM median_salaries
    


    이것이 SQL에서 평균, 중앙값, 최빈값을 계산하는 방법입니다.

    좋은 웹페이지 즐겨찾기