2010-06-07 49 views
0

我想对我们的demographioc表进行查找以显示一些统计数据。但是,由于出来的人口统计表很大,我想在一个查询中完成。MYSQL - 多个计数的统计

有2场是很重要的:性别,LAST_LOGIN

我希望能够得到各种日期范围登录(<1天前1-7天前,7-30天总数前,等)GROUPED BY性别

我现在知道如何做一个日期范围。例如少于1天前:

SELECT sex, count(*) peeps 
    FROM player_account_demo 
WHERE last_demo_update > 1275868800 
GROUP BY sex 

将返回:

sex  peeps 
---------------- 
UNKNOWN 22 
MALE  43 
FEMALE 86 

但是我不得不为每个范围内做一次。有没有办法让那里的所有3个范围?

我希望我的最终结果是这个样子:

sex  peeps<1day  peeps1-7days  peeps7-30days 

谢谢!

重要提示:最后demo_update是划时代的时间(UNIX时间戳)

回答

2
SELECT sex, 
    SUM(IF(DATEDIFF(NOW(),last_login) < 1,1,0)), 
    SUM(IF(DATEDIFF(NOW(),last_login) BETWEEN 1 AND 7,1,0)), 
    SUM(IF(DATEDIFF(NOW(),last_login) BETWEEN 7 AND 30,1,0)) 
FROM player_account_demo 
GROUP BY sex 
+0

Thx让我走上了正轨 – darudude 2010-06-07 20:05:30

0

你想用一个Pivot Table

+0

数据透视表是用于显示权利吗?我希望能够在1个查询中选择所有内容,而无需选择整个表格并在php中完成所有操作。 – darudude 2010-06-07 18:50:31

+0

这不是查询语言支持的概念。如果你真的想这样做,你可以在你的SELECT语句中逐个检查一下(例如参见Wrikken的回答)。 – VeeArr 2010-06-07 19:17:20

+1

'PIVOT'和'UNPIVOT'是ANSI我相信,但只支持SQL Server 2005+和Oracle 11g +。对于这个问题,CASE是ANSI-92 ... – 2010-06-07 19:22:47