2013-02-08 6 views
8

Итак, у меня есть 4 таблицы.MYSQL - Использование SUM с JOIN

A users стол с колонками id и name.

A groups стол с колоннами id, name и owner.

A items стол с колонками group и content.

A content стол с колонками id, name и duration.

Каждый пользователь может иметь несколько групп. Каждая группа может иметь в себе несколько элементов. Каждый элемент представляет собой один из фрагментов контента.

Я хочу, чтобы иметь возможность перечислять все группы, с суммой всех продолжительности каждого содержания внутри этой группы.

Что Ive пытался это:

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

и может дать некоторые простые данные? –

ответ

15

попробовать это

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 
+0

решена без каких-либо простых данных! большое спасибо! – Jimmery

+0

вы приветствуете! я хотел подтвердить простыми данными, если бы я дал мне :), чтобы показать u на sqlfiddle demo. удачи ! –

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 
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 
Смежные вопросы