这个SQL该咋整?@SQL大神

水人 发布于 2015/09/08 09:05
阅读 242
收藏 0

TableA:aid(自增列),class(部门编号),value(绩效得分)

 TableB(id(部门编号,name(部门名称

想统计部门绩效分总和,SQL 经过指点得到

SELECT   name,IFNULL(sum(`value`),0) as total
FROM  B
LEFT JOIN A ON A.class = B.id
GROUP BY   class

现在有个新情况: A表加字段week,实现按周统计

SELECT   name,IFNULL(sum(`value`),0) as total
FROM  B
LEFT JOIN ON A.class = B.id    where week=1

GROUP BY   class

于是效果就不对了(那些没有扣分也没有加分的部门没有显示)

我还尝试了这个也不行

 SELECT name,IFNULL(sum(`value`),0) as total FROM B LEFT JOIN (select * from A where week=1)as A ON A.class = B.id where week =1 GROUP BY class

 -------------------------以下是测试数据

aid    class    value   week

-----------------------------A表

1      2          -2        1

2      1          +2        1

3      2          +1        2

id       name

-----------------B表

1         财会        

2         后勤 

3         仓管 

想要得到的结果:

name   total

-----------------

财会        2        

后勤       -2 

仓管        0


加载中
0
飞炀
飞炀
如楼上所写,查询条件where后面只跟主连接表的查询条件,被连接查询的表的查询条件全都放到连接的on里面写。
0
水人
水人
为嘛加了个where就不对了?
0
joaboo
joaboo

where换成and就好了

SELECT name,IFNULL(sum(`value`),0) as total
FROM B
LEFT JOIN A ON A.class = B.id and A.week=1
GROUP BY class



0
水人
水人

楼上两位都是正确答案,谢谢了啊

怎奈只能设置一个正确答案

水人
水人
回复 @ericsoul : 嗯嗯
ericsoul
ericsoul
让他们PK一下,为什么。解决问题,不要不求甚解,解决了就行,而不知道个所以然,是不好的。
0
空杯子
空杯子
select B.name, ifnull(T.val,0) total from B 
left join (select sum(value) val, class from A group by class where week=1) T 
on A.id=t.class

性能也许好一点



水人
水人
谢谢,我试试
返回顶部
顶部