2014-02-06 37 views
0

我有三個表格:用戶,銷售額和積分。在多個不相關的表上對值進行求和?

每個用戶有多個銷售點和多個點。

銷售有一列「值」,並分有一列「分數」,像這樣

users = | user_id | name | 

sales = | sale_id | user_id | value | 

points = | point_id | user_id | score | 

現在我想告訴所有用戶的列表,與他們的銷售的總和,並指出,像這樣

user_id | sum(sales.value) | sum(points.value) 
1  | 500   | 200 
2  | 213   | 132 
3 . . . 

是否有可能在一個查詢中實現,而不使用子查詢?

或者什麼是最好的,最簡單的方法?我試圖儘可能簡化這一點,因爲我有很多與用戶有關的信息,我必須以這種方式展示。

我試過使用左連接,但是當我在一個查詢中連接兩個一對多表時,由於重複的行,總和顯然變得混亂。我試着分組數據,但我認爲我迷路了。

+0

您需要使用子查詢。你爲什麼不想用它們? –

+0

謝謝,這就是我需要知道的。這不是我不想要的,我想知道是否有另一種方法,我可能不知道。 –

回答

1

SQL中的「正確」的方法是加入他們之前總結表:

select u.user_id, sumvalue, sumscore 
from users u left outer join 
    (select user_id, sum(value) as sumvalue 
     from sales 
     group by user_id 
    ) s 
    on u.user_id = s.user_id left outer join 
    (select user_id, sum(score) as sumscore 
     from points 
     group by user_id 
    ) p 
    on u.user_id = p.user_id; 
0

對於下面的數據,SQL給出了這些結果 -

user_id user_name 
1 Davolio 
2 Fuller 
3 Leverling 
4 Peacock 
5 Buchanan 
6 Suyama 
7 King 
8 Callahan 
9 Dodsworth 

sale_id user_id sale_value 
10248 5 $32.38 
10249 6 $11.61 
10250 4 $65.83 
10251 3 $41.34 
10252 1 $51.30 
10253 3 $58.17 
10254 5 $22.98 
10255 9 $148.33 
10256 3 $13.97 
10257 4 $81.91 

point_id user_id score 
10319 7 64 
10320 5 35 
10321 3 3 
10322 7 0 
10323 4 5 
10324 9 214 
10325 1 65 
10326 4 78 
10327 2 63 
10333 5 1 
10334 8 9 

SELECT users.user_id, 
     users.user_name, 
     (SELECT SUM(sale_value) FROM sales 
     WHERE sales.user_id = users.user_id) AS SalesValue, 
     (SELECT SUM(score)  FROM points 
     WHERE points.user_id = users.user_id) AS ScoreValue 
FROM users; 

user_id user_name SalesValue ScoreValue 
1 Davolio   $51.30 65 
2 Fuller      63 
3 Leverling   $113.48 3 
4 Peacock   $147.74 83 
5 Buchanan   $55.36 36 
6 Suyama   $11.61  
7 King      64 
8 Callahan     9 
9 Dodsworth  $148.33 214 
相關問題