2016-08-26 2 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  | 
01,

그래서 활성 그룹에 대해 메일 유형당 개수를 알아야합니다.

저는 (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