2017-12-16 4 views
0

나는이 두 테이블 소득 (ID, 소득, 날짜, 사용자 ID) 및 테이블 비용 (id,amount,date,userid). 이제 소득 총액, 1 년 총 액으로 뷰를 만들려고합니다. 또한 GROUPED by yearuserid이어야합니다.연간 수입과 지출 테이블

새 테이블 (보기)에는 소득, 비용, 연도의 합계가 있어야합니다. 지금이 코드에 붙어 있습니다.

SELECT 
    id, 
    i.Prihod, 
    e.Rashod, 
    YEAR 
    YEAR(COALESCE(e.god, i.godi))) AS Godina , 
    users_id 
FROM 
    (
     SELECT 
      sum(insum) as 'Prihod', 
      YEAR(datum) as 'Godi', 
      users_id 
     FROM 
     GROUP BY users_id 
    ) as i 
FULL OUTER JOIN 
(
    SELECT 
     sum(amount) as 'Rashod', 
     YEAR(datum) as 'God', 
     users_id 
    FROM expense 
    GROUP BY users_id 

) as e 
+1

AFAIK MySQL은 뷰에서 파생 테이블 (from 절의 하위 쿼리)을 허용하지 않습니다. –

답변

0

구조화 된 쿼리 언어의 구조 부분에 대한 작업이다. 세 개의 하위 쿼리 (가상 테이블)로 시작하십시오.

첫 번째 : 년 및 사용자 목록입니다. MySQL에는 FULL OUTER JOIN 기능이 없기 때문에이 항목이 필요합니다. 이 쿼리를 올바르게 작성하면 필요한 연도마다 각 사용자별로 하나의 행이 포함됩니다.

   SELECT DISTINCT YEAR(datum) Godi, users_id FROM income 
       UNION 
       SELECT DISTINCT YEAR(datum) Godi, users_id FROM expense 

둘째, 연도 별 및 사용자 별 소득 요약. 셋째

   SELECT sum(insum) as Prihod, 
         YEAR(datum) as Godi, 
         users_id 
       FROM income 
       GROUP BY YEAR(datum), users_id 

, 올해 및 사용자

   SELECT sum(amount) as Rashod, 
         YEAR(datum) as God, 
         users_id 
       FROM expense 
       GROUP BY YEAR(datum), users_id 

다음에 의한 비용의 유사한 합은 당신이 기대하는 결과를 보장하기 위해, 개별적으로 독립이 하위 쿼리를 테스트합니다. 그들이 테이블 인 것처럼

마지막으로, 그래서

SELECT yr.users_id, yr.Godi, inc.Prihod, exp.Rashod 
    FROM (
       SELECT DISTINCT YEAR(datum) Godi, users_id FROM income 
       UNION 
       SELECT DISTINCT YEAR(datum) Godi, users_id FROM expense 
     ) yr 
    LEFT JOIN (
       SELECT sum(insum) as Prihod, 
         YEAR(datum) as Godi, 
         users_id 
       FROM income 
       GROUP BY YEAR(datum), users_id 
     ) inc ON yr.users_id = inc.users_id AND yr.Godi = inc.Godi 
    LEFT JOIN (
       SELECT sum(amount) as Rashod, 
         YEAR(datum) as God, 
         users_id 
       FROM expense 
       GROUP BY YEAR(datum), users_id 
     ) exp ON yr.users_id = exp.users_id AND yr.Godi = exp.God 

여기에 쿼리 패턴은 세 개의 하위 쿼리를 개발하는 것처럼, 함께 가입 할 수 있습니다. 첫 번째 행은 원하는 결과 행마다 하나의 행을 포함하기 때문에 최종 결과 세트의 행 수를 결정합니다. 두 번째 및 세 번째 쿼리에는 최종 결과 집합에 필요한 각 행에 대해 하나 또는 0 개의 행이 있습니다. 그런 다음 함께 가입하십시오.

+0

디버깅 할 기회가 없었습니다. 또한 귀하의 모국어를 모르기 때문에 귀하의 칼럼 이름을 잘못 이해했을 수도 있습니다. 그렇다면, 죄송합니다. –

+0

U는 훌륭한 일을했으며, 일하고 있습니다, 당신은 저를 구해줍니다 ..... Thx O. Jones. – Lima

+0

당신의 쿼리를 사용하고 그것은 잘 작동하지만 어디서 삽입해야합니까 - 어디 users_id = ". $ id."-) $ id는 ($ id = $ _SESSION [ 'user_session'];) – Lima