SQL除以2的Count()函数

11

我有以下查询语句,试图计算某个产品在所有产品中所占百分比。例如:[产品数量] / [总产品数] = 百分比

;WITH totalCount AS(
    SELECT 
        CAST(COUNT(id) as Integer)as totalCount
    FROM TABLE_NAME
)
SELECT 
    ((CAST(COUNT(DISTINCT id) as Integer)/(SELECT * FROM totalCount))*100) as 'Percent'
FROM TABLE_NAME

但是,百分比列始终返回“0”,除非只有一条记录。此外,是否有一种方法将totalCount和Select查询合并到一起?

基本上,如何将两个Count()字段相除?

3个回答

10

将您的总数转换为除整数之外的数字(DECIMAL?)- 数学四舍五入。


1
谢谢,成功了!总是那些简单的东西让你失误。 - Jefe
2
请确保您对代码进行注释。下一个开发人员可能没有您聪明。 - Matthew Vines
2
我通常使用更简单的方法,而不是乘以100,而是乘以100.0。 - Joel Mansford

5

将其转换为具有小数精度的类型,而不是整数。使用float或real。

select cast(distinctCount as real)/cast(totalCount as real) * 100.00
   , distinctCount
   , totalCount
from (
 select count(distinct id) as distinctCount
  , count(id) as totalCount
  from Table) as aggregatedTable

1
在数学计算中,不要使用浮点数或实数,因为它们是不精确的数据类型,可能会引入舍入误差。请使用十进制数进行计算。 - HLGEM

2

那不应该是:

;WITH totalCount AS(
    SELECT 
        CAST(COUNT(id) as Integer)as totalCount
    FROM TABLE_NAME
)
SELECT 
    ((CAST(COUNT(DISTINCT id) as Integer)*100/(SELECT count(*) FROM totalCount))) as 'Percent'
FROM TABLE_NAME

请注意 SELECT COUNT(*)。此外,在除法之前应先进行乘法运算,否则将始终得到零。

我不这么认为,因为 totalCount 查询只返回一行数据,所以如果你加入 COUNT(*),它总是返回 1 而不是实际的总数。不过还是谢谢你的帮助 :) - Jefe
好的 :-) 但是乘以100肯定会解决你的问题。 - Philippe Leybaert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接