计算总回报的百分比0

时间:2012-07-12 15:46:15

标签: sql-server select percentage

我希望返回按每个id_cerinta分组的百分比,例如根据{subcerinteProiectacoperire= 'acoperita'条记录中有多少subcerinteProiect分为所有id_sarcina条记录{1}}按

分组

enter image description here

我尝试过类似的事情:

SELECT 
    id_cerinta,
    SUM(CASE WHEN acoperire = 'acoperita' THEN 1 ELSE 0 END) 
        / COUNT(*) * 100 AS nr_subcerinte_acoperit 
FROM 
    subcerinteProiect 
GROUP BY 
    id_cerinta

但它不太好用。它只返回0 ..

2 个答案:

答案 0 :(得分:2)

这是由于整数数学。试试这些:

SELECT 5/100, 57/100, 99/100;

结果全部为0。

现在尝试:

SELECT 5.0/100, 57.0/100, 99.0/100;

更好的结果,对吧?

所以对于你的查询:

SELECT 
    id_cerinta, 
    CONVERT(DECIMAL(5,2), 
        SUM(CASE WHEN acoperire = 'acoperita' THEN 1 ELSE 0 END) 
            / COUNT(*) * 100.0) AS nr_subcerinte_acoperit 
FROM 
    subcerinteProiect 
GROUP BY
    id_cerinta

答案 1 :(得分:1)

MSDN解释了此行为here

  

如果整数被除数除以整数除数结果为   整数,其结果的任何小数部分截断

此外,100INT eger常量:

SELECT  DataType    = SQL_VARIANT_PROPERTY(100, 'BaseType'),
        Precision   = SQL_VARIANT_PROPERTY(100, 'Precision'),
        Scale       = SQL_VARIANT_PROPERTY(100, 'Scale');

结果:

DataType Precision Scale
-------- --------- -----
int      10        0

并且here MSDN说* (Multiply)

  

返回优先级较高的参数的数据类型。对于   更多信息,请参阅Data Type Precedence (Transact-SQL)

intint之间具有较高优先级的数据类型为... int

所以SUM / COUNT = int(in this case) / int = int

SUM/COUNT * 100 = int * int = int

解决方案由Aaron提出。

相关问题