2016-08-26 3 views
0

Я пытаюсь собрать сводную таблицу с подсчетом типов сообщений, отправленных группой.Базы данных MySQL/Таблицы

Надеюсь, этого недостаточно, чтобы объяснить, что я имею в виду.

Таблица 1 (отправители)

| id | name | group_id | 
+----+------+----------+ 
| 1 | mike | 1  | 
| 2 | john | 1  | 
| 3 | lucy | 2  | 
| 4 | lobo | 3  | 

Таблица 2 (почта)

| id | type  | sender_id | 
+----+----------+-----------+ 
| 1 | letter | 1   | 
| 2 | postcard | 2   | 
| 3 | postcard | 1   | 
| 4 | letter | 2   | 
| 5 | postcard | 2   | 
| 6 | postcard | 4   | 

В таблице 3 (групп)

| id | name | active | 
+----+-------+--------+ 
| 1 | alpha | 1  | 
| 2 | black | 1  | 
| 3 | cero | 0  | 

идеального результата

| group | letter | postcard | parcel | 
+-------+--------+----------+--------+ 
| alpha | 2  | 3  | 0  | 
| black | 0  | 0  | 0  | 

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

Я работал с примерами (только изучая MySQL), но когда я думаю об этой ситуации, я просто совершенно пуст.

Просмотрели ответы Joining three tables to get summary data in MySQL, но я не совсем понимаю, как перевести ответы на мои проблемы.

Любая помощь приветствуется.

ответ

0

Вы помещаете этот запрос

Select count(*) from senders s inner join mail m on s.id = s.sender_id inner join 
groups g on s.groups_id = g.id group by m.type 
0
SELECT t.name, 
MAX(CASE t.TYPE WHEN 'letter' THEN @CS:[email protected]+1 ELSE 0 END) letter, 
MAX(CASE t.TYPE WHEN 'postcard' THEN @CS1:[email protected]+1 ELSE 0 END) postcard , 
MAX(CASE t.TYPE WHEN 'parcel ' THEN @CS2:[email protected]+1 ELSE 0 END) parcel 
FROM 
(SELECT 
    groups. name, 
    mail.type 
FROM 
    groups 
LEFT JOIN senders ON groups.id = senders.id 
LEFT JOIN mail ON senders.id = mail.sender_id) AS t 
,(SELECT @CS:=0) CS ,(SELECT @CS1:=0) CS1 ,(SELECT @CS2:=0) CS2 
+0

добавить некоторые пояснения – HaveNoDisplayName

+0

Row Denormaliser – zpc

Смежные вопросы