使用分组病例语句计算总数的百分比

使用分组病例语句计算总数的百分比

问题描述:

所以我有一个CASE语句,我已经分组了。但是,我还试图计算每个分组CASE结果的总数百分比。当我运行下面进行的命令,它给使用分组病例语句计算总数的百分比

Region   Number Percentage 
West Coast  11675 0 
Not West Coast 104620 0 

我不明白为什么“比例”来作为“0”。

下面是代码,标有'问题行'。

With [Summed Region] AS 
(

SELECT 
    [State Province], 

    CASE [State Province] 
    WHEN 'Oregon' THEN 'West Coast' 
    WHEN 'Washington' THEN 'West Coast' 
    WHEN 'California' THEN 'West Coast' 
    ELSE 'Not West Coast' 
    END AS 'Region' 

FROM 
    [WideWorldImportersDW].[Dimension].[City] 
) 

SELECT 
    Region, 
    count(Region) AS Number, 
    ---THE PROBLEM LINE IS BELOW THIS--- 
    count(region)/(select count(*) FROM [WideWorldImportersDW].[Dimension]. 
    [City]) AS Percentage 


FROM 
    [Summed Region] 

GROUP BY 
    Region 

那条线的问题是什么?如果我将这两部分分开,每一部分都会返回正确的数字。但是当我将另一个分开时,我会得到'0'。

谢谢!

它被称为整数除法。所以加小数点地方:

SELECT Region, count(Region) AS Number, 
     count(region) * 1.0/(select count(*) FROM [WideWorldImportersDW].[Dimension].[City]) AS Percentage 
FROM [Summed Region] 
GROUP BY Region; 

你不需要的子查询要么,所以使用窗函数:

SELECT Region, count(*) AS Number, 
     count(*) * 1.0/sum(count(*)) over() AS Percentage 
FROM [Summed Region] 
GROUP BY Region; 
+0

嗯,这很容易,谢谢!在12分钟内,我会回答这个问题...... – bbb0777

+0

哦,是的......我想我已经用窗口函数实现了这一点,只是显然将CASE&GROUP结合起来达到了我想象的极限。再次感谢!对于遇到这种情况的其他人 - 过于复杂,但也可以使用CAST(count(*)AS FLOAT)来通过整数事物来遍历整个除法整数,而不是乘以1.0 – bbb0777