SQL 获取百分比
SQL getting Percentage
我有以下代码来计算总死亡人数并按 PersonType 分组。现在我想要一个列来计算每个死亡人数的百分比。即取每种人员类型的值并除以总死亡人数。
Select distinct persontype as PerSsonType, sum(fatalities_in_crash) as Total_Deaths
from [CarCrash].[Source_Data_Staging]
group by PersonType
您可以使用 ANSI 标准 window 函数(大多数数据库都支持这些函数,包括 SQL 服务器):
Select persontype as PerSsonType, sum(fatalities_in_crash) as Total_Deaths,
sum(fatalities_in_crash) * 1.0 / sum(sum(fatalities_in_crash)) over () as ratio
from [CarCrash].[Source_Data_Staging]
group by PersonType;
注意:您几乎不需要 SELECT DISTINCT
和 GROUP BY
。 * 1.0
是因为某些数据库使用整数除法——这会为所有行生成 0
。
您可以将此查询与 select 不分组死亡总和的查询交叉连接:
SELECT persontype,
SUM(fatalities_in_crash) AS Total_Deaths,
SUM(fatalities_in_crash) / all_deaths AS percentage
FROM [CarCrash].[Source_Data_Staging]
JOIN (SELECT SUM(fatalities_in_crash) AS all_deaths
FROM [CarCrash].[Source_Data_Staging]) t
GROUP BY persontype
我有以下代码来计算总死亡人数并按 PersonType 分组。现在我想要一个列来计算每个死亡人数的百分比。即取每种人员类型的值并除以总死亡人数。
Select distinct persontype as PerSsonType, sum(fatalities_in_crash) as Total_Deaths
from [CarCrash].[Source_Data_Staging]
group by PersonType
您可以使用 ANSI 标准 window 函数(大多数数据库都支持这些函数,包括 SQL 服务器):
Select persontype as PerSsonType, sum(fatalities_in_crash) as Total_Deaths,
sum(fatalities_in_crash) * 1.0 / sum(sum(fatalities_in_crash)) over () as ratio
from [CarCrash].[Source_Data_Staging]
group by PersonType;
注意:您几乎不需要 SELECT DISTINCT
和 GROUP BY
。 * 1.0
是因为某些数据库使用整数除法——这会为所有行生成 0
。
您可以将此查询与 select 不分组死亡总和的查询交叉连接:
SELECT persontype,
SUM(fatalities_in_crash) AS Total_Deaths,
SUM(fatalities_in_crash) / all_deaths AS percentage
FROM [CarCrash].[Source_Data_Staging]
JOIN (SELECT SUM(fatalities_in_crash) AS all_deaths
FROM [CarCrash].[Source_Data_Staging]) t
GROUP BY persontype