各位老师,我拟进行两个表之间的统计,主表t_main,明细表t_work,两表用userid字段关联,
现在按单位统计每个userid的工作明细情况,写了如下语句,感觉很幼稚,哪位老师教我一个更好的语句?
谢谢!
select userid
,username
,unit
,(SELECT COUNT(*) FROM t_work where userid=t_main.userid) as count1
,(SELECT COUNT(*) FROM t_work where userid=t_main.userid AND ifsofar=1) as count2
from t_main
where unit = '1002'
------解决思路----------------------
相关子查询效率在确实比较低,不过,如果你的t_work的数据量如果很少的话,还是可以用的
建议用左连接
select
T1.userid
,T1.username
,T1.unit
,COUNT(1)count1
,COUNT(CASE WHEN T2.ifsofar=1 THEN 1 END)count2
from t_main T1
LEFT JOIN t_work T2 ON T1.userid=T2.userid
where T1.unit = '1002'
GROUP BY
T1.userid
,T1.username
,T1.unit
------解决思路----------------------
select m.userid , m.username , m.unit ,
-- sum(1)?as?count1?,?
count(w.userid) as count1 , 上面那句,换成这个
sum(case when ifsofar =1 then 1 else 0 end ) as count2
from t_main m left join t_work w on m.userid = w.userid
group by m.userid , m.username , m.unit
[/code]