2017-08-26 103 views
1

我如何通過按月分組獲得用戶總數count如何獲得月總用戶數mysql

我想列出按月分組的註冊用戶總數。

關於這一點的難點是,如果在任何月份沒有數據,我希望計數必須與計數值爲0的範圍內的所有月份。

我的代碼

SELECT tots.*, @var := @var + tots.`count` as totalCount 
    FROM (
    SELECT 
     YEAR(registered) AS `year`, 
     MONTH(registered) AS `month`, 
     COUNT(*) AS `count` 
    FROM user where id = 73 
      AND registered >= '2017-01-01' 
      AND registered <= '2017-05-01' 
    GROUP BY `year`, `month` 
) 
AS tots, (SELECT @var := 0) AS inc 

電流輸出

+------+-------+-------+-------------+ 
| Year | Month | Count | TotalCount | 
+------+-------+-------+-------------+ 
| 2017 | 01 | 1  | 1   | 
| 2017 | 04 | 4  | 5   | 
+------+-------+-------+-------------+ 

首選的輸出

+------+-------+-------+-------------+ 
| Year | Month | Count | TotalCount | 
+------+-------+-------+-------------+ 
| 2017 | 01 | 1  | 1   | 
| 2017 | 02 | 0  | 1   | 
| 2017 | 03 | 0  | 1   | 
| 2017 | 04 | 1  | 2   | 
| 2017 | 05 | 0  | 2   | 
+------+-------+-------+-------------+ 

這裏計數當月是新用戶總數,並且TotalCount是截至該月份的總用戶數。

NULL結果是必需的。

我怎麼能在mySQL或Laravel PHP中實現該結果?

+0

輸出輸出輸出。如何輸入? – Strawberry

+0

@Strawberry我沒有得到你。 – Rajeev

+0

請參閱[爲什麼我應該提供一個用於我認爲是非常簡單的SQL查詢的MCVE](http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for - 什麼似乎對我來說是一個非常簡單的SQL查詢) – Strawberry

回答

0

大概你每個月至少有一個用戶註冊。如果是這樣,您可以使用條件聚合:

SELECT tots.*, (@var := @var + tots.`count`) as totalCount 
FROM (SELECT YEAR(registered) AS `year`, MONTH(registered) AS `month`, 
      SUM(id = 73) AS `count` 
     FROM user 
     WHERE registered >= '2017-01-01' AND registered <= '2017-05-01' 
     GROUP BY `year`, `month` 
    ) tots CROSS JOIN 
    (SELECT @var := 0) AS params; 

否則,您需要一個日曆表或每月生成一行的方法。

+0

謝謝。此代碼也提供與當前輸出相同的輸出。 – Rajeev

+0

@Rajeev。 。 。所以你有一些年/月組合是*沒有*用戶有數據,不只是用戶'73'。在這種情況下,您需要一個日曆表或其他方法來生成所有月份。 –