难以使用 LAG 获得每月进度百分比
Difficulty using LAG to get monthly progress percentage
我在下面有以下 table,我想获取每月总交易量的月度变化 (%)。我研究了 LAG 函数,但不是很了解。
我需要这个查询的 return 是这样的(期望的输出):
MONTH | TOTAL TRANSACTIONS | % EVOLUTION
----------------------------------------
09 | 45.561 | 0%
10 | 48.598 | 6.66%
更新
% EVOLUTION = ((current value - previous value) / previous value) *
100
这是我用来计算交易数量从一个月到上个月的演变的公式。
也就是说,需要包含上个月总计的列。
DDL
CREATE TABLE IF NOT EXISTS `campanha` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ano_mes` date DEFAULT NULL,
`nome` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
`cpf` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`conta` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`valor` float(10,2) UNSIGNED ZEROFILL NOT NULL,
`transacoes` int(255) DEFAULT NULL,
PRIMARY KEY (`id`)
)
有人能帮帮我吗?
MySQL 版本:5.7.23 - MySQL 社区服务器
MySQL5.x不支持LAG
等window函数。你必须用老方法来做。基于 table 结构,以下查询应该可以帮助您入门:
SELECT yyyy
, mm
, txn_this_month
, (txn_this_month - (
SELECT SUM(transacoes)
FROM campanha
WHERE ano_mes >= STR_TO_DATE(CONCAT_WS('-', yyyy, mm, 1),'%Y-%c-%e') - INTERVAL 1 MONTH
AND ano_mes < STR_TO_DATE(CONCAT_WS('-', yyyy, mm, 1),'%Y-%c-%e')
)) / txn_this_month * 100 AS perc_change
FROM (
SELECT EXTRACT(YEAR FROM ano_mes) AS yyyy
, EXTRACT(MONTH FROM ano_mes) AS mm
, SUM(transacoes) AS txn_this_month
FROM campanha
GROUP BY EXTRACT(YEAR FROM ano_mes), EXTRACT(MONTH FROM ano_mes)
) AS x
ORDER BY yyyy, mm
select 中的子查询计算每行上个月的总和。
我在下面有以下 table,我想获取每月总交易量的月度变化 (%)。我研究了 LAG 函数,但不是很了解。
我需要这个查询的 return 是这样的(期望的输出):
MONTH | TOTAL TRANSACTIONS | % EVOLUTION
----------------------------------------
09 | 45.561 | 0%
10 | 48.598 | 6.66%
更新
% EVOLUTION = ((current value - previous value) / previous value) * 100
这是我用来计算交易数量从一个月到上个月的演变的公式。 也就是说,需要包含上个月总计的列。
DDL
CREATE TABLE IF NOT EXISTS `campanha` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ano_mes` date DEFAULT NULL,
`nome` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
`cpf` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`conta` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`valor` float(10,2) UNSIGNED ZEROFILL NOT NULL,
`transacoes` int(255) DEFAULT NULL,
PRIMARY KEY (`id`)
)
有人能帮帮我吗?
MySQL 版本:5.7.23 - MySQL 社区服务器
MySQL5.x不支持LAG
等window函数。你必须用老方法来做。基于 table 结构,以下查询应该可以帮助您入门:
SELECT yyyy
, mm
, txn_this_month
, (txn_this_month - (
SELECT SUM(transacoes)
FROM campanha
WHERE ano_mes >= STR_TO_DATE(CONCAT_WS('-', yyyy, mm, 1),'%Y-%c-%e') - INTERVAL 1 MONTH
AND ano_mes < STR_TO_DATE(CONCAT_WS('-', yyyy, mm, 1),'%Y-%c-%e')
)) / txn_this_month * 100 AS perc_change
FROM (
SELECT EXTRACT(YEAR FROM ano_mes) AS yyyy
, EXTRACT(MONTH FROM ano_mes) AS mm
, SUM(transacoes) AS txn_this_month
FROM campanha
GROUP BY EXTRACT(YEAR FROM ano_mes), EXTRACT(MONTH FROM ano_mes)
) AS x
ORDER BY yyyy, mm
select 中的子查询计算每行上个月的总和。