首页 > 解决方案 > 如何添加另一列来计算 SQL 中所选表的某些列的总比例?

问题描述

我正在使用来自 AdventureWorks2017 模式的名为 HumanResources.Employee 的表。它显示如下:

图像1.

在 16 个专栏中,我关注的是 OrganizationLevel 和 JobTitle。然后我统计具有相同组织级别和职位的人数并选择一个新表:

SELECT
    OrganizationLevel,
    JobTitle,
    COUNT(*) AS Counts
FROM HumanResources.Employee AS tb1
GROUP BY
    OrganizationLevel,
    JobTitle;

结果是:

图2

我想要的是在此表中添加一列(tb1)。在新列中是比例。

我试过这个:

SELECT *, tb1.Counts / SUM(tb1.Counts) 
FROM 
(
    SELECT OrganizationLevel, JobTitle, COUNT(*) as Counts
    FROM HumanResources.Employee AS tb1
    GROUP BY OrganizationLevel, JobTitle
)

但是,错误消息显示:

消息 102,第 15 级,状态 1,第 1 行

什么是正确的命令?谢谢!

标签: sqlsql-server

解决方案


您想为此使用窗口函数。基本上,您需要对所有行的计数求和:

SELECT OrganizationLevel, JobTitle,
       COUNT(*) AS Counts,
       100.0 * COUNT(*) / SUM(COUNT(*)) OVER () 
FROM HumanResources.Employee e
GROUP BY OrganizationLevel, JobTitle;

推荐阅读