2012-03-30 68 views
1

我试图从一个mysql数据库中获得已经为服务付费并在某一年注册的用户数。成员可以支付多个服务,从而可以计算两次:分组通过不聚合SQL中的列组

select 
    count(payment_order.memberId) as members, 
    from_unixtime(account_login.memberFrom, '%Y') as memberFrom 
from 
    payment_order 
join 
    account_login 
on 
    payment_order.memberId = account_login.memberId 
Where 
    account_login.memberFrom != '0' 
    and payment_order.`status` = 'paid' 
    and payment_order.dateCompleted >= '2010-01-01 00:00:00' 
    and payment_order.dateCompleted <= '2011-12-31 23:59:59' 
group by memberFrom 

不是通过多年的分组,它似乎是由个人会员数来分组。我觉得我做的事情,可以;吨见树不见林:

1, 2005 
4, 2005 
1, 2005 
1, 2006 
5, 2006 
5, 2006 

我正在寻找的是

6, 2005 
11, 2006 

感激那可以解释我的befuddlement任何指针

回答

6

您正在按account_login.memberFrom分组,这会创建每个单独的行。

然后,您在每一行上选择from_unixtime(account_login.memberFrom, '%Y'),创建重复值。

相反,使用GROUP BY from_unixtime(account_login.memberFrom, '%Y')

+0

完美的答案,解释清楚 - 会尽快它让我接受。非常感谢 – 2012-03-30 10:24:44