好的,我有4张桌子。
包含users
列和id
列的name
表。
包含groups
,id
和name
列的owner
表。
包含items
列和group
列的content
表。
包含content
,id
和name
列的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"
答案 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