2016-08-26 48 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

行Denormaliser – zpc