2010-03-04 32 views
12

我有這樣一個表:如何應用SUM操作而不將結果分組到SQL中?

+----+---------+----------+ 
| id | group | value | 
+----+---------+----------+ 
| 1 | GROUP A | 0.641028 | 
| 2 | GROUP B | 0.946927 | 
| 3 | GROUP A | 0.811552 | 
| 4 | GROUP C | 0.216978 | 
| 5 | GROUP A | 0.650232 | 
+----+---------+----------+ 

如果我執行下面的查詢:

SELECT `id`, SUM(`value`) AS `sum` FROM `test` GROUP BY `group`; 

我,很明顯,得到:

+----+-------------------+ 
| id | sum    | 
+----+-------------------+ 
| 1 | 2.10281205177307 | 
| 2 | 0.946927309036255 | 
| 4 | 0.216977506875992 | 
+----+-------------------+ 

但我需要像表這一個:

+----+-------------------+ 
| id | sum    | 
+----+-------------------+ 
| 1 | 2.10281205177307 | 
| 2 | 0.946927309036255 | 
| 3 | 2.10281205177307 | 
| 4 | 0.216977506875992 | 
| 5 | 2.10281205177307 | 
+----+-------------------+ 

總結行明確重複。

有沒有辦法獲得這個結果,而無需使用多個(嵌套)查詢?

+0

聯接使用'group' – 2010-03-04 16:51:54

+0

你是做多件事情的加入您的查詢結果反饋到表格中,使多個查詢(嵌套)需要 – John 2010-03-04 16:52:37

+4

變化'GROUP BY group'到' GROUP BY id' - 是否會返回預期的結果? – 2010-03-04 16:53:18

回答

9

這將取決於您的SQL服務器上,Postgres裏/ Oracle的我會用窗口功能。在MySQL中...不可能afaik。

也許你可以假像這樣:

SELECT a.id, SUM(b.value) AS `sum` 
FROM test AS a 
JOIN test AS b ON a.`group` = b.`group` 
GROUP BY a.id, b.`group`; 
+0

+1這一個在語法上是正確的,並給出正確的答案。 – 2010-03-04 17:03:23

+0

GROUP BY a.id就夠了,不要被a.id和b.group需要組; – a1ex07 2010-03-04 17:07:12

1

沒有沒有AFAIK。你將不得不使用像

SELECT t.`id`, tsum.sum AS `sum` 
FROM `test` as t GROUP BY `group` 
JOIN (SELECT `id`, SUM(`value`) AS `sum` FROM `test` GROUP BY `group`) AS tsum 
    ON tsum.id = t.id 
+0

ERROR 1064(42000):你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的正確語法手冊 'JOIN(SELECT'id',SUM('value')AS'sum' FROM'test' GROUP BY'group')AS TSUM ' 在第3行 – 2010-03-04 17:00:46