2016-06-10 61 views
3

我想要得到的weight爲每個人總數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 

例如,對於傑米總重量爲96(48 + 48),所以我必須要計算他的每行的重量值爲96的百分比。

+0

你能解釋一下你得到其他權重比例?我無法理解你是如何達到這些數字的。 – Mureinik

+0

@Mureinik如果你添加55 + 54 + 48 = 157,比0.25大小(55/157)* 100 –

+1

你的MSSQL版本是否支持SUM()OVER()'?否則,使用子查詢或與分組cte連接。 – Serg

回答

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 

這句法將在所有關係數據庫工作(據我所知)。

+0

上面的代碼有1個問題,從上面的表中,如果還有1個條目,如** Taylor | 0.45 | 50 **它計算泰勒兩次, 就像在輸出它會像 taylor \t | \t 0.45 \t \t | 35 \t | taylor \t | \t 0.45 \t \t | 25 \t | 我想taylor只有一次,如果大小相同 –

+0

@red重量和百分比重量應爲重複大小的值?合併(添加)每個尺寸的權重?使用最低/最高?所有重複大小的行都對總數有貢獻嗎? – 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](https://msdn.microsoft.com/en-us/library/ms189461.aspx)子句在這裏做了真正的工作;)。 Upvoted,因爲這是在我看來,更優雅的解決方案。 –

+0

什麼是cte? – Serg

+0

上面的代碼中有1個問題,如果還有1個條目比如** Taylor | 0.45 | 50 **它計算泰勒兩次, 就像在輸出它會像 taylor \t | \t 0.45 \t \t | 35 \t | taylor \t | \t 0.45 \t \t | 25 \t | 我想泰勒只有一次,如果大小是相同的 –