首页 > 解决方案 > 使用 SQL 计算百分比

问题描述

我正在尝试从下表中找到如何计算百分比

在此处输入图像描述

从上表中,我希望得到如下百分比的数据。但是,我下面的 SQL 语句将所有百分比值返回为 0。请告知我错过了什么。谢谢

Select SupplierID
    , ProductID
    , Month
    , Year
    , Count(SupplierID) AS TotalSales
    , (count(SupplierID)* 100/(Select Count (*) From ProductOrder)) AS Percentage     
From ProductOrder
Order by Year DESC, Month DESC

在此处输入图像描述

标签: sqlsql-servercountsumaggregate-functions

解决方案


那是整数除法。除法的两个操作数都是整数,因此结果也以整数形式给出;3/40,不是0.75。要解决此问题,只需将其中一个参数转换为小数即可。

我还建议使用窗口函数而不是子查询:

select supplierid, month, year, 
    count(*) as totalsales, 
    100.0 * count(*) / sum(count(*)) over(partition by month, year) as percentage
from productorder
group by supplierid, month, year
order by year desc, month desc, supplierid

笔记:

  • 您的原始代码不是一个有效的聚合查询开始:它缺少一个group by子句

  • 您的样本数据表明您希望每个供应商的比率与月份和年份的总数相比,而您的查询(尝试)计算总体比率;我也修好了


推荐阅读