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