【问题标题】:Calculating % of total with a Grouped Case statement使用分组案例语句计算总数的百分比
【发布时间】:2017-10-28 20:30:06
【问题描述】:

所以我有一个已分组的 CASE 语句。但是,我也试图计算每个 Grouped 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”。

谢谢!

【问题讨论】:

    标签: sql tsql case


    【解决方案1】:

    这称为整数除法。所以在某处添加一个小数:

    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;
    

    【讨论】:

    • 哦,是的...我想我实际上已经用窗口函数做到了,只是显然结合 CASE 和 GROUP 达到了我的想象极限。再次感谢!对于遇到此问题的其他人 - 过于复杂,但也可以使用CAST(count(*) AS FLOAT) 来解决整数除以整数的问题,而不是乘以 1.0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2010-10-20
    • 2014-05-07
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多