2017-08-26 6 views
1

私は月はどのように総ユーザーを取得するには、カウントmonthwise mysqlの

私は月ごとにグループ化された登録ユーザーの合計数を一覧表示したい

によってグループ化することによって、MySQLでは、総ユーザー数を取得するにはどうすればよいです。

これについての難しさは、ある月の間にデータがない場合は、カウントが0である範囲の間のすべての月の数を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

おそらく、毎月少なくとも1人のユーザーが登録されています。もしそうなら、あなたは条件付き集約使用することができます。

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; 

をそうしないと、カレンダーのテーブルまたは月ごとに1つの行を生成する方法が必要です。

+0

ありがとうございました。このコードは、私の現在の出力と同じ出力を与えています。 – Rajeev

+0

@Rajeev。 。 。だからあなたには、年に一度のコンボがあります。ユーザーは「73」だけでなく、データを持っていません。その場合は、すべての月を生成するためにカレンダー表またはその他の方法が必要です。 –

関連する問題