我希望返回按每个id_cerinta
分组的百分比,例如根据{subcerinteProiect
个acoperire= 'acoperita'
条记录中有多少subcerinteProiect
分为所有id_sarcina
条记录{1}}按
我尝试过类似的事情:
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 ..
答案 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:
如果整数被除数除以整数除数,结果为 整数,其结果的任何小数部分截断。
此外,100
是INT
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)。
int
和int
之间具有较高优先级的数据类型为... int
。
所以SUM / COUNT = int(in this case) / int = int
和SUM/COUNT * 100 = int * int = int
。
解决方案由Aaron提出。