需要计算百分比

3

我希望获得每个人的总重量的百分比作为其weight

这是我的数据:

TableA

Name        |   Size    |   Weight  
------------------------------------  
Jamie       |   0.25    |   48  
Jamie       |   0.50    |   48  
Taylor      |   0.25    |   55  
Taylor      |   0.30    |   54  
Taylor      |   0.45    |   48  

以下是我想要的输出:

Name    |   Size        |   Percentage  |   Weight  
---------------------------------------------------------------  
Jamie   |   0.25        |   50%     |   48  
Jamie   |   0.50        |   50%     |   48  
Taylor  |   0.25        |   35.03%      |   55  
Taylor  |   0.30        |   34.39%      |   54  
Taylor  |   0.45        |   30.57%      |   48  

例如,Jamie的总体重为96(48+48),因此我需要计算每行他的体重值占96的百分比。

你能解释一下其他权重得到的百分比吗?我无法理解你是如何计算出这些数字的。 - Mureinik
@Mureinik 如果你加上55+54+48=157,那么对于0.25的大小来说,(55/157)*100 - Red Devil
1
你的 MSSQL 版本是否支持 SUM() OVER()?如果不支持,可以使用子查询或者与分组 CTE 连接。 - Serg
那是一个打字错误吗?0.45应该是0.25吗? - Mureinik
2个回答

4

将表格与计算重量总和的查询联接:

select t.name, size, 100.0 * weight / total, weight
from tableA t
join (select name, sum(weight) total
      from tableA
      group by name) s on s.name = t.name

这个语法可以在所有关系型数据库上使用(至少我知道的是这样)。


以上代码存在1个问题,根据上述表格,如果有1项新的输入,如 **Taylor | 0.45 | 50 ** 它会计算两次泰勒展开式, 即在输出中,它将显示为
taylor | 0.45 | 35 | 48
taylor | 0.45 | 25 | 50如果大小相同,我希望仅计算泰勒展开式1次。
- Red Devil
@red 对于重复的尺寸,weight和percentage weight应该是什么值?将每个尺寸的权重相加?使用最低/最高值?所有重复的尺寸行都会对总数产生贡献吗? - Bohemian

1
使用 CTE 实现特定目的。
;WITH CTE 
AS
(
   SELECT *, 100 * Weight/SUM(Weight) OVER(Partition By Name) AS Per 
   FROM TableName
)
SELECT * FROM CTE

1
当然,即使没有CTE,这种技术仍然可以工作。over子句在这里才是真正的工作;)我投了赞成票,因为我认为这是更优雅的解决方案。 - David Rushton
CTE是用来做什么的? - Serg
以上代码存在1个问题,从上表中可以看出,如果有1个额外的条目,例如**Taylor | 0.45 | 50 **,它会计算两次泰勒公式,就像输出结果一样: 泰勒公式 | 0.45 | 35 | 48 泰勒公式 | 0.45 | 25 | 50如果大小相同,我希望只计算1次泰勒公式。 - Red Devil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接