【问题标题】:MYSQL - Using SUM with JOINMYSQL - 将 SUM 与 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"

【问题讨论】:

  • 你能提供一些简单的数据吗?

标签: mysql join sum


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2017-02-25
      • 2019-11-18
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 2021-12-10
      相关资源
      最近更新 更多