2013-02-08 66 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