我正在尝试整理一个汇总表,其中包含按组发送的邮件类型的计数。
希望下面的内容足以解释我的意思。
表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的答案,但我不太明白如何翻译我的问题的答案。
任何帮助都是非常感谢的。
发布于 2016-08-26 13:30:30
你把这个查询
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 发布于 2016-08-26 14:11:26
SELECT t.name,
MAX(CASE t.TYPE WHEN 'letter' THEN @CS:=@CS+1 ELSE 0 END ) letter,
MAX(CASE t.TYPE WHEN 'postcard' THEN @CS1:=@CS1+1 ELSE 0 END ) postcard ,
MAX(CASE t.TYPE WHEN 'parcel ' THEN @CS2:=@CS2+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 https://stackoverflow.com/questions/39158622
复制相似问题