14

わかりましたので、4つのテーブルがあります。

usersidと を含むテーブルname

groupsidnameおよびを含むテーブルowner

itemsgroupと を含むテーブルcontent

contentidnameおよびを含むテーブルduration

各ユーザーは複数のグループを持つことができます。各グループには、複数のアイテムを含めることができます。各項目は、コンテンツの 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

残念ながら、これはすべてのグループの各コンテンツのすべての期間の合計で、1 つの結果しか得られません。

"g001", "Group 1", "Me", "400"

私が期待しているのは次のようなものです:

"g001", "Group 1", "Me", "160"
"g002", "Group 2", "You", "160"
"g003", "Group 3", "Them", "80"
4

3 に答える 3

19

これを試して

   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
于 2013-02-08T13:28:29.293 に答える
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
于 2013-02-08T13:27:02.153 に答える
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
于 2013-02-08T13:28:15.650 に答える