2011-05-25 43 views
2

我有一張表,列B,C和D可以被認爲是標識符,列E - I是值。根據標識符將存在一些非唯一的行,即B,C和D的值與其他行的值匹配(可能多於一行匹配)。SQL - 返回所有行,但非唯一行合併爲一個(算術執行)?

我想要一個查詢,它返回所有的行,除了那些非唯一的行。在這些情況下,我希望只返回一行,並將它們的值相加,只有一個例外是E列。這應該是關於列F的加權平均值,即對於每個匹配行,返回的值應該是E * F

的F /總和

E, F 
7, 1 
9, 4 
E = (7*1 + 9*4)/(1+4) = 8.6 

我可以使用哪些查詢來實現返回結果的期望設定?

所有幫助非常感謝!

回答

5

我想這應該這樣做:

select B, C, D, sum(E*F)/sum(F), sum(F), sum(G), sum(H), sum(I) 
from MyTable 
group by B, C, D 
1
SELECT B,C,D,SUM(E*F)/SUM(F), SUM(F), SUM(G), SUM(H), SUM(I) 
FROM my_table 
GROUP BY B,C,D; 
2
SELECT B, C, D, 
     SUM(E * F)/SUM(F) AS E_WEIGHTED, 
     SUM(F) AS F_SUM, 
     SUM(G) AS G_SUM, 
     SUM(H) AS H_SUM, 
     SUM(I) AS I_SUM 
    FROM TableX 
GROUP BY B, C, D 

一般GROUP BY子句是什麼將整合共享重複值的行(你在GROUP BY子句中命名的列) 。