计算占总回报的百分比 0

TBo*_*dan 2 sql-server select percentage

我希望返回按每个分组的百分比,例如根据分组方式将id_cerinta多少录音划分为所有录音subcerinteProiectacoperire= 'acoperita'subcerinteProiectid_sarcina

在此输入图像描述

我尝试过类似的东西:

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
Run Code Online (Sandbox Code Playgroud)

但效果不太好。它只返回 0..

Aar*_*and 6

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

SELECT 5/100, 57/100, 99/100;
Run Code Online (Sandbox Code Playgroud)

结果全是0。

现在尝试:

SELECT 5.0/100, 57.0/100, 99.0/100;
Run Code Online (Sandbox Code Playgroud)

更好的结果,对吗?

因此,对于您的查询:

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
Run Code Online (Sandbox Code Playgroud)

  • @TBogdan 不,转换 DECIMAL(5,2) 不应在 COUNT(*) 上使用。当表中的行数超过 999 行时会发生什么?* 100.0 应该可以工作。如果没有,请发布重现。至于您的其他问题,请不要在评论中更改您的问题范围。开始一个新问题,显示样本数据和期望的结果。 (2认同)