5

重複の可能性:
MySQLで現在の合計を計算します

MySQLとPHPを使用したグラフについて、2011年以降にアプリケーションで作成されたユーザーの数を月ごとに監視しています。クエリの一部として、現在の合計も含めたいと思います。

SELECT
  DATE_FORMAT(created,'%Y%m%d') as 'Date',
  COUNT(item_id) as 'NewUsers'
FROM AP_user
WHERE YEAR(created) > 2011
  AND user_groups = '63655'
  AND user_active = 1
  AND userID NOT IN $excludedUsers
GROUP BY MONTH(created) ASC

「月ごとのユーザー数」を返すことはできますが、このクエリの一部として現在の合計を含めるにはどうすればよいですか?

4

1 に答える 1

6

残念ながら、MySQLは、OracleやSQLServerのような分析機能を提供していません。

「現在の合計」を取得する1つの方法は、次のようなユーザー変数を使用することです。

  SELECT t.Date
       , t.NewUsers
       , @rt := @rt + t.NewUsers AS `Running Total`
    FROM (SELECT @rt := 0) i
    JOIN (
           SELECT DATE_FORMAT(created,'%Y%m%d') AS `Date`
                , COUNT(item_id) as `NewUsers`
             FROM AP_user
            WHERE YEAR(created) > 2011
              AND user_groups = '63655'
              AND user_active = 1
              AND userID NOT IN $excludedUsers
            GROUP BY DATE_FORMAT(created,'%Y-%m')
            ORDER BY DATE_FORMAT(created,'%Y-%m') ASC
         ) t

注:上記で使用されたようなメモリ変数の動作は、このコンテキストでは保証されません。しかし、クエリに注意すれば、SELECTステートメントで予測可能で繰り返し可能な結果を​​得ることができます。メモリ変数の動作は将来のリリースで変更される可能性があり、このアプローチは機能しなくなります。

注:基本的にクエリを括弧で囲み、インラインビュー(MySQLが「派生テーブル」と呼ぶもの)としてエイリアスを指定しました。クエリにいくつか変更を加えました。GROUPBYは、2012年1月を2013年1月と一緒にグループ化する可能性があります。これを変更しました。ORDERBY句も追加しました。

于 2012-08-22T18:45:22.423 に答える