可能重复:
计算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
Run Code Online (Sandbox Code Playgroud)
我能够按月返回"用户",但如何将运行总计作为此查询的一部分?
不幸的是,MySQL不提供分析功能,如Oracle和SQL Server.
获得"运行总计"的一种方法是使用用户变量,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
注意:在此上下文中不保证上面使用的内存变量的行为.但是如果我们小心查询,我们就可以在SELECT语句中获得可预测的,可重复的结果.内存变量的行为可能会在将来的版本中发生变化,从而使这种方法无法工作.
注意:我基本上将您的查询包装在括号中,并给它一个别名作为内联视图(MySQL称之为"派生表").我对您的查询做了一些更改,您的GROUP BY有可能将2012年1月和2013年1月分组,我改变了.我还添加了一个ORDER BY子句.
| 归档时间: |
|
| 查看次数: |
4762 次 |
| 最近记录: |