2013-02-08 73 views
8

好的,所以我有4個表。MYSQL - 與JOIN一起使用SUM

A users表中列idname

A groups表中列id,nameowner

A items表中列groupcontent

A content表中列id,nameduration

每個用戶可以有多個組。每個組裏可以有幾個項目。每個項目表示其中一項內容。

我希望能夠列出所有羣組,,其中包含該羣組內的每條內容的所有持續時間的總和。

什麼香港專業教育學院一直在努力的是:

select groups.id,groups.name,users.name,sum(content.duration) as duration from groups 
join users on groups.owner=users.id 
join items on items.group=groups.id 
join content on content.id=items.content 

可惜,這只是給我一個結果,在所有組的每條內容的所有持續時間的總和 - 像這樣:

"g001", "Group 1", "Me", "400" 

我所期待是一樣的東西:

"g001", "Group 1", "Me", "160" 
"g002", "Group 2", "You", "160" 
"g003", "Group 3", "Them", "80" 
+0

ü可以給一些簡單的數據? – 2013-02-08 13:27:04

回答

15

試試這個

select groups.id,groups.name,users.name,sum(content.duration) as duration from groups 
    join users on groups.owner=users.id 
    join items on items.group=groups.id 
    join content on content.id=items.content 
    group by groups.name 
+0

解決沒有任何簡單的數據!非常感謝! – Jimmery 2013-02-08 14:33:17

+0

歡迎你!我想通過簡單的數據證實,如果你給我:)來展示你在sqlfiddle演示。祝你好運 ! – 2013-02-08 14:37:39

1

試試這個:

select groups.id,groups.name,users.name,sum(content.duration) as duration 
from groups 
    join users 
     on groups.owner=users.id 
    join items 
     on items.group=groups.id 
    join content 
     on content.id=items.content 
group by groups.id,groups.name,users.name 
1

LEFT JOIN,可以顯示所有組即使沒有內容,但duration的總價值將爲零。

SELECT a.id, a.name GroupName, 
     d.name OwnerName, 
     SUM(c.duration) totals 
FROM groups a 
     INNER JOIN users d 
      ON a.owner = d.id 
     LEFT JOIN items b 
      ON a.id = b.group 
     LEFT JOIN content c 
      ON b.content = c.id 
GROUP BY a.id, a.name, d.name