MYSQL - 将 SUM 与 JOIN 结合使用
Posted
技术标签:
【中文标题】MYSQL - 将 SUM 与 JOIN 结合使用【英文标题】:MYSQL - Using SUM with JOIN 【发布时间】:2013-01-24 06:39:09 【问题描述】:好的,所以我有 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"
【问题讨论】:
你能提供一些简单的数据吗? 【参考方案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.name
【讨论】:
欢迎您!如果你给了我,我想通过简单的数据来确认:) 向你展示 sqlfiddle 演示。祝你好运!【参考方案2】: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
【讨论】:
【参考方案3】:试试这个:
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
【讨论】:
以上是关于MYSQL - 将 SUM 与 JOIN 结合使用的主要内容,如果未能解决你的问题,请参考以下文章
将 GROUPED BY SUM 查询与其他查询链接(使用 JOIN 或子查询)
使用 MySQL 通过 JOIN 获取 GROUP BY 中的 SUM