2014-06-19 103 views
1

獲取記錄基礎上,月 - mysql的

Fiddle

查詢,

SELECT 
    IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=1,COUNT(MONTH(FROM_UNIXTIME(p.created_timestamp))),0) AS '1', 
    IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=2,COUNT(MONTH(FROM_UNIXTIME(p.created_timestamp))),0) AS '2', 
    IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=3,COUNT(MONTH(FROM_UNIXTIME(p.created_timestamp))),0) AS '3', 
    IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=4,COUNT(MONTH(FROM_UNIXTIME(p.created_timestamp))),0) AS '4', 
    IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=5,COUNT(MONTH(FROM_UNIXTIME(p.created_timestamp))),0) AS '5', 
    IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=6,COUNT(MONTH(FROM_UNIXTIME(p.created_timestamp))),0) AS '6', 
    IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=7,COUNT(MONTH(FROM_UNIXTIME(p.created_timestamp))),0) AS '7', 
    IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=8,COUNT(MONTH(FROM_UNIXTIME(p.created_timestamp))),0) AS '8', 
    IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=9,COUNT(MONTH(FROM_UNIXTIME(p.created_timestamp))),0) AS '9', 
    IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=10,COUNT(MONTH(FROM_UNIXTIME(p.created_timestamp))),0) AS '10', 
    IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=11,COUNT(MONTH(FROM_UNIXTIME(p.created_timestamp))),0) AS '11', 
    IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=12,COUNT(MONTH(FROM_UNIXTIME(p.created_timestamp))),0) AS '12' 
FROM `tyr_profile_view` p 
WHERE p.user_id != '59' 
    AND p.`user_id` != 0 
    AND YEAR(FROM_UNIXTIME(p.created_timestamp)) = YEAR(CURDATE()) 

這樣的記錄顯示,

enter image description here

輸出上面的查詢

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 
|----|---|---|---|---|---|---|---|---|----|----|----| 
| 18 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 

以上數據清楚你,我的問題是什麼,但是如果你仍然不明白我的問題請隨時問我。

P.S.我想要一個恰當的方式來顯示準確的結果。這是行得通的,但沒有給出正確的結果。

+0

刷新您的頁面,可能是加載時出現問題。我在另一個瀏覽器中打開而未登錄,它正在工作。 –

+0

您能顯示想要的輸出嗎 –

回答

1

你可以把它像這樣

Fiddle

查詢

SELECT 
    COUNT(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=1, 1, NULL)) AS '1', 
    COUNT(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=2, 1, NULL)) AS '2', 
    COUNT(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=3, 1, NULL)) AS '3', 
    COUNT(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=4, 1, NULL)) AS '4', 
    COUNT(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=5, 1, NULL)) AS '5', 
    COUNT(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=6, 1, NULL)) AS '6', 
    COUNT(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=7, 1, NULL)) AS '7', 
    COUNT(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=8, 1, NULL)) AS '8', 
    COUNT(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=9, 1, NULL)) AS '9', 
    COUNT(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=10, 1, NULL)) AS '10', 
    COUNT(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=11, 1, NULL)) AS '11', 
    COUNT(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=12, 1, NULL)) AS '12' 
FROM `tyr_profile_view` p 
WHERE p.user_id != '59' 
    AND p.`user_id` != 0 
    AND YEAR(FROM_UNIXTIME(p.created_timestamp)) = YEAR(CURDATE()) 

輸出

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 
|---|---|---|---|---|---|---|---|---|----|----|----| 
| 1 | 0 | 0 | 3 | 6 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 

注:創建此查詢作爲阿爾瑪待辦事項建議

究竟需要: enter image description here

1

您的問題是因爲您爲每條記錄選擇COUNT。這不是IF的工作方式。相反,你應該做的聚集外範圍內,所以不是:

IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=1,COUNT(MONTH(FROM_UNIXTIME(p.created_timestamp))),0) AS '1' 

COUNT(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=1, 1, NULL)) AS '1' 
1

您可以嘗試的東西作爲

SELECT 
sum(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=1,1,0)) AS '1', 
sum(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=2,1,0)) AS '2', 
sum(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=3,1,0)) AS '3', 
sum(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=4,1,0)) AS '4', 
sum(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=5,1,0)) AS '5', 
sum(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=6,1,0)) AS '6', 
.......................... 
FROM `tyr_profile_view` p 
WHERE p.user_id != '59' 
    AND p.`user_id` != 0 
    AND YEAR(FROM_UNIXTIME(p.created_timestamp)) = YEAR(CURDATE()) 

所以它會得到的總和()由檢查月份值是否爲條件

DEMO

1

嘗試用SUM聯合IF

SELECT 
    SUM(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=1, 1, 0)) AS 'January', 
    SUM(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=2, 1, 0)) AS 'Feburary', 
    SUM(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=3, 1, 0)) AS 'March', 
    SUM(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=4, 1, 0)) AS 'April', 
    SUM(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=5, 1, 0)) AS 'May', 
    SUM(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=6, 1, 0)) AS 'June', 
    SUM(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=7, 1, 0)) AS 'July', 
    SUM(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=8, 1, 0)) AS 'Augest', 
    SUM(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=9, 1, 0)) AS 'September', 
    SUM(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=10, 1, 0)) AS 'October', 
    SUM(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=11, 1, 0)) AS 'November', 
    SUM(IF(MONTH(FROM_UNIXTIME(p.created_timestamp))=12, 1, 0)) AS 'December' 
FROM `tyr_profile_view` p 
WHERE p.user_id != '59' 
    AND p.`user_id` != 0 
    AND YEAR(FROM_UNIXTIME(p.created_timestamp)) = YEAR(CURDATE()) 

輸出:


JANUARY FEBURARY MARCH APRIL MAY JUNE JULY AUGEST SEPTEMBER OCTOBER NOVEMBER DECEMBER 
1  0   0  3  6 8  0  0  0   0  0   0 

Fiddle Demo

+0

如果我使用count,沒有區別,那麼爲什麼使用sum?請分享 。 –

+1

沒有區別。但這也是達到您的解決方案的一種方式。 –