计算百分比的替代查询

Alternative query for calculating percentage

在 SQL 计算百分比的服务器中,我有如下函数:

CREATE FUNCTION [dbo].[fuGetPercentage] ( @part FLOAT, @total FLOAT )
RETURNS FLOAT 
AS
BEGIN   
    DECLARE @Result FLOAT = 0, @Cent FLOAT = 100;
    IF (isnull(@total, 0) != 0)
        SET @Result = isnull(@part, 0) * @Cent / @total;
    RETURN @Result
END

我想知道是否有更好的选择,具有相同的检查和更好的计算百分比,如下所示:

SELECT (CASE ISNULL(total, 0) 
            WHEN 0 THEN 0 
            ELSE ISNULL(part, 0) * 100 / total 
        END) as percentage

我想像上面一样在SELECT之后直接使用

使用 ISNULL 等函数存在一个问题。在这种情况下,查询将不会使用索引。如果代码的美观不是第一位的,那么你可以这样做:

SELECT
    CASE WHEN total * part <> 0 /* will check that both total and part are not null and != 0*/ 
           THEN part * 100 / total
         ELSE 0
    END AS percentage;

我使用@DmitrijKultasev 回答,但现在,我发现它有两个问题:

  1. 乘法结果溢出导致转换错误
  2. 性能问题;因为那个数学乘法及其转换。

所以我改成这样:

SELECT
    CASE 
        WHEN total <> 0 AND part <> 0 THEN -- This will return 0 for Null values
            part * 100 / total
        ELSE 
            0
    END AS percentage;