MYSQL - 使用SUM和JOIN

时间:2013-02-08 13:23:06

标签: mysql join sum

好的,我有4张桌子。

包含users列和id列的name表。

包含groupsidname列的owner表。

包含items列和group列的content表。

包含contentidname列的duration表。

每个用户可以有多个组。每个组中都可以包含多个项目。每个项目代表其中一个内容。

我希望能够列出所有群组,以及该群组内每段内容的所有持续时间总和

我一直在尝试的是:

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"

3 个答案:

答案 0 :(得分:17)

试试这个

   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

答案 1 :(得分: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

答案 2 :(得分: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