2014-12-01 3 views
1

3 개의 테이블이 있습니다. works, softwareagent3 개의 테이블과 날짜별로 그룹화하여 합계를 선택하는 SQL을 작성하는 방법

그것은 그렇게 보여


agent :

id name 
1 agent1 
2 agent2 
3 agent3 
4 agent4 

works

id name date(TIMESTAMP type) agent_id 
1 w1 2014/1/1 1 
2 w2 2014/2/2 1 
3 w3 2014/1/3 2 
4 w4 2014/1/4 2 
5 w5 2014/1/5 3 
6 w6 2014/1/6 4 
7 w7 2014/1/7 4 
8 w8 2014/1/8 4 
9 w9 2014/3/9 4 

software

,617,
id name date(TIMESTAMP type) agent_id 
1 s1 2014/1/1 1 
2 s2 2014/2/2 1 
3 s3 2014/1/3 2 
4 s4 2014/1/4 2 
5 s5 2014/1/5 3 
6 s6 2014/1/6 4 
7 s7 2014/1/7 4 
8 s8 2014/1/8 4 
9 s9 2014/3/9 4 

와 나는 같은 결과를 얻으려면 : + 소프트웨어 작품의 현재 연도의 합계 매월

Jan-14 Feb-14 Mar-14 Apr-14 May-14 Jun-14 Jul-14 Aug-14 Sep-14 Oct-14 Nov-14 Dec-14 
agent1 2 2 0 0 0 0 0 0 0 0 0 0 
agent2 4 0 0 0 0 0 0 0 0 0 0 0 
agent3 2 0 0 0 0 0 0 0 0 0 0 0 
agent4 6 0 2 0 0 0 0 0 0 0 0 0 

AGENT_ID

으로 연결하는 방법 MySQL의에서 SQL을 쓸 수 있습니까?

+2

당신의 시도를 게시하시기 바랍니다. –

+0

@MitchWheat actullay,이 SQL에 대해서는 전혀 모른다. 내 첫 번째 생각은 아마도'SELECT a.name, FROM agent a, software r, w.a.id = r.agent_id 또는 a.id = r.agent_id; – chanjianyi

답변

1

이 시도 :

SELECT a.id, a.name, 
     SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM w.date) = 201401 THEN 1 WHEN EXTRACT(YEAR_MONTH FROM s.date) = 201401 THEN 1 ELSE 0 END) AS Jan14, 
     SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM w.date) = 201402 THEN 1 WHEN EXTRACT(YEAR_MONTH FROM s.date) = 201402 THEN 1 ELSE 0 END) AS Feb14, 
     SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM w.date) = 201403 THEN 1 WHEN EXTRACT(YEAR_MONTH FROM s.date) = 201403 THEN 1 ELSE 0 END) AS Mar14, 
     SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM w.date) = 201404 THEN 1 WHEN EXTRACT(YEAR_MONTH FROM s.date) = 201404 THEN 1 ELSE 0 END) AS Apr14, 
     SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM w.date) = 201405 THEN 1 WHEN EXTRACT(YEAR_MONTH FROM s.date) = 201405 THEN 1 ELSE 0 END) AS May14, 
     SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM w.date) = 201406 THEN 1 WHEN EXTRACT(YEAR_MONTH FROM s.date) = 201406 THEN 1 ELSE 0 END) AS Jun14, 
     SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM w.date) = 201407 THEN 1 WHEN EXTRACT(YEAR_MONTH FROM s.date) = 201407 THEN 1 ELSE 0 END) AS Jul14, 
     SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM w.date) = 201408 THEN 1 WHEN EXTRACT(YEAR_MONTH FROM s.date) = 201408 THEN 1 ELSE 0 END) AS Aug14, 
     SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM w.date) = 201409 THEN 1 WHEN EXTRACT(YEAR_MONTH FROM s.date) = 201409 THEN 1 ELSE 0 END) AS Sep14, 
     SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM w.date) = 201410 THEN 1 WHEN EXTRACT(YEAR_MONTH FROM s.date) = 201410 THEN 1 ELSE 0 END) AS Oct14, 
     SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM w.date) = 201411 THEN 1 WHEN EXTRACT(YEAR_MONTH FROM s.date) = 201411 THEN 1 ELSE 0 END) AS Nov14, 
     SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM w.date) = 201412 THEN 1 WHEN EXTRACT(YEAR_MONTH FROM s.date) = 201412 THEN 1 ELSE 0 END) AS Dec14 
FROM agent a 
LEFT OUTER JOIN works w ON a.id = w.agent_id 
LEFT OUTER JOIN software s ON a.id = s.agent_id 
GROUP BY a.id; 
+0

나는 몇 가지 합계 결과를이 SQL에 의해 잘못 설립했다. 나는 왼쪽 조인에 문제가 있다고 생각한다. 왜냐하면 내가 SELECT a.id, a.name과 같은 간단한 SQL을 실행할 때 , SUM (EXTRACT (YEAR_MONTH FROM w.date) = '201411'THEN 1 ELSE 0 END) AS 201411 FROM 에이전트에서 LEFT OUTER JOIN a.id = w.agent_id에 의해 GROUP BY a.id 순서대로 작동합니다. 결과는 정확합니다. – chanjianyi

+0

sql'SELECT a.id, a.name이 잘못되었습니다. , SUM (EXTRACT (YEAR_MONTH FROM w.date) = '201411') 그 다음 1 번 (YEAR_MONTH FROM s.date) = '201411'THEN 1 ELSE 0 END) AS 201411 에이전트에서 LEFT OUTER JOIN은 a.id = w.agent_id LEFT OUTER JOIN 소프트웨어에서 작동합니다. a.id = s.agent_id GROUP BY a.id 순서대로 a.id; 왜 그런지 알아? – chanjianyi

+0

은 왼쪽 두 조인과 함께 소프트웨어에서 합계가 아닌 왼쪽 조인이 두 개가되는 SQL에서 합계가 하나의 왼쪽 조인으로 작동 함을 의미합니다. – chanjianyi

관련 문제