MYSQL - 将 SUM 与 JOIN 结合使用

Posted

技术标签:

【中文标题】MYSQL - 将 SUM 与 JOIN 结合使用【英文标题】:MYSQL - Using SUM with JOIN 【发布时间】:2013-01-24 06:39:09 【问题描述】:

好的,所以我有 4 张桌子。

一个users 表,其中包含idname 列。

一个groups 表,其中包含idnameowner 列。

一个items 表,其中包含groupcontent 列。

一个content 表,其中包含idnameduration 列。

每个用户可以有多个组。每个组里面可以有几个项目。每个项目代表一个内容片段。

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

我一直在尝试的是:

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 结合使用的主要内容,如果未能解决你的问题,请参考以下文章

MySQL JOIN 与 SUM 和 3 个表

MySQL 在 JOIN 中使用 SUM? [复制]

将 GROUPED BY SUM 查询与其他查询链接(使用 JOIN 或子查询)

使用 MySQL 通过 JOIN 获取 GROUP BY 中的 SUM

尝试将 INNER JOIN 和 GROUP BY SQL 与 SUM 函数一起使用,但不工作

MySQL:带有 JOIN 的 SUM() 返回不正确的值