Mysql Присоединиться И СУММА - PullRequest
1 голос
/ 18 августа 2011

Пожалуйста, посмотрите на эту картинку

http://i.stack.imgur.com/A2RB2.jpg

я хочу получить

  1. сумма денег в таблице приходит
  2. сумма денег в таблице оставь
  3. внутреннее соединение emp с использованием идентификатора

Вот мой запрос

SELECT uid,SUM(money) FROM come 
INNER JOIN emp ON(come.uid = emp.id) 
WHERE emp.statue=1 
GROUP BY come.uid 
UNION 
SELECT uid,SUM(money) FROM `leave` 
INNER JOIN emp ON ( leave.uid = emp.id ) 
GROUP BY leave.uid 

и результатом было это изображение

http://i.stack.imgur.com/xZtO3.jpg

Ответы [ 3 ]

0 голосов
/ 18 августа 2011

Попробуйте это

   select uid,sum(ComeTot),sum(LeaveTot)
   from
  (

    SELECT uid,SUM(money) as ComeTot ,0 as LeaveTot
    FROM come 
    INNER JOIN emp ON(come.uid = emp.id) WHERE emp.statue=1 
    GROUP BY come.uid 
    UNION 
    SELECT uid,0 ,SUM(money) FROM leave
    INNER JOIN emp ON ( leave.uid = emp.id ) 
    GROUP BY leave.uid
  ) xx

GROUP BY xx.uid

У меня не установлен mySQL на этом ПК, но это должно вас приблизить.В зависимости от результата выше, вам может понадобиться обернуть весь запрос выше в другую группу на ...

0 голосов
/ 18 августа 2011

Другой способ сделать это (не проверено, поэтому дайте мне знать, если он взорвется):

SELECT emp.id, IF(emp.statue=1, c.sumCome, 0) AS sumCome, l.sumLeave
FROM emp
     LEFT JOIN (SELECT uid, SUM(money) AS sumCome
                FROM come
                GROUP BY uid
               ) c ON emp.id = c.uid
     LEFT JOIN (SELECT uid, SUM(money) AS sumLeave
                FROM leave
                GROUP BY uid
               ) l ON emp.id = l.uid

Я не знаю, что будет быстрее, чем у Кевина.Возможно, вы захотите explain их обоих и посмотрите.

0 голосов
/ 18 августа 2011

здесь мы идем:

SELECT q1.uid,SUM(q1.l),SUM(q1.c) FROM
(
SELECT uid,0 as l,SUM(money) as c FROM come 
INNER JOIN emp ON (come.uid = emp.id) 
WHERE emp.statue=1 GROUP BY come.uid 
UNION ALL 
SELECT uid,SUM(money) as l,0 as c FROM leave
INNER JOIN emp ON ( leave.uid = emp.id ) GROUP BY leave.uid 
) q1
GROUP BY uid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...