关于一个统计的SQL问题

大家好,我遇到了一个问题,是这样的,有2个表,1个表示存储用户银联支付的信息(proposal表),另一个表示存储用户移动支付的,比如微信和支付宝支付之类的(payorder表),现在要做的就是统计一个代理下目前有多少是首存的用户,首存的意思是只存过一次款的,也就是说proposal,payorder这两个表其中一个只有一条数据的,多的都不算,统计每个代理有几个这样的用户,proposal这个表里已经有代理的字段(agent),payorder没有,需要到users表关联(agent字段),请问这个怎么写?

大致逻辑是这样:

select t.userid as userid
from proposal t
group by t.agent,t.userid having count(1)<1
union
select t2.userid as userid
from payorder t1
left join user t2 on t1.agent=t2.agent
group by t1.agent,t2.userid having count(1)<1;

具体sql语句的写法还得根据你这两个表的实际情况来定。

参考自:
MySQL如何优化GROUP BY http://www.data.5helpyou.com/article237.html

MySQL如何优化LEFT JOIN和RIGHT JOIN http://www.data.5helpyou.com/article211.html

SELECT T.loginname,COUNT(TIME1),COUNT(TIME2) FROM (
SELECT
u.agent,
u.loginname,
CASE WHEN pro.createTime IS NOT NULL THEN 1 END time1,
CASE WHEN pay.createTime IS NOT NULL THEN 1 END time2
FROM (users u)
left join proposal pro on pro.agent = u. agent
left join payorder pay on pay.loginname = u.loginname
WHERE u.agent = 'a_liqun8am') T
ORDER BY T.loginname;

我的思路是这样的,内层查询查出代理下的所有用户的存款记录time1表示银行转账,time2等于移动支付,
1表示已经有过记录了
图片说明
然后外层再加一个查询,用来统计每个用户的所有存款记录,可是不知道这个分组为什么永远都只有一条数据,图一明明有这么多个loginname,但是到了分组里就只有一个,知道的兄弟跟我说一下,谢谢大家。这只是思路。
然后在这条语句的基础上将time1和time2的两个字段相加,值等于1的就说明这个用户只有首存的。

图片说明
补上面图二的图片