日期:2014-05-17  浏览次数:20742 次

【疑惑求解】不能对包含聚合或子查询的表达式执行聚合函数。
表信息:
表A
用户ID  用户名    上线用户(用户名)
111     AAA       null
222     BBB       AAA
333     CCC       AAA
444     DDD       null


表B 
用户ID    在线时间(s)
111       2323
111       2323
222       5656
222       5656
333       782
333       656
444       569
444       856


查询结果:所有上线用户信息
用户ID  用户名  下线用户数  下线用户在线时间5000s以上人数  


查询语句:
select b.upname,a.id,
count(b.id) 总下线人数,
count(case when sum(m.onlinetime) > 5000 then m.id end) 
from tableA b
left join tableA a 
on b.upname = a.name
left join tableB m
on b.id = m.id
where b.upname is not null
group by b.upname,a.id



错误:
第3行 不能对包含聚合或子查询的表达式执行聚合函数。

求大神指教
聚合函数 子查询

------解决方案--------------------
select b.upname,a.id,count(b.id) 总下线人数,
count(case when m.onlinetime > 5000 then m.id end) 
from tableA b
left join tableA a on b.upname = a.name
left join (select id,SUM(onlinetime) as onlinetime from tableB group by id) m on b.id = m.id
where b.upname is not null
group by b.upname,a.id