Mysql加入AND SUM

时间:2011-08-18 12:27:42

标签: mysql join sum

请看这张照片

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

我想要

  1. 表中的钱总和
  2. 表中的金额总和
  3. 使用id
  4. 的内部联接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 :(得分:0)

我们走了:

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

答案 1 :(得分:0)

试试这个

   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,但这应该让你接近。根据上述结果,您可能需要将整个查询包含在另一个组中...

答案 2 :(得分:0)

另一种方法(没有经过测试,所以让我知道它是否会爆炸):

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

我不知道哪个比Kevin更快。您可能希望explain他们俩都看到。