mysql - 使用 LAG 获取每月进度百分比的难度
问题描述
我有下表,并想了解每月总交易量的每月演变(%)。我研究了LAG函数,但不能很好地理解。
我需要这个查询的返回是这样的(期望的输出):
MONTH | TOTAL TRANSACTIONS | % EVOLUTION
----------------------------------------
09 | 45.561 | 0%
10 | 48.598 | 6.66%
更新
% EVOLUTION = ((当前值 - 先前值) / 先前值) * 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 社区服务器
解决方案
MySQL 5.x 不支持窗口函数,例如LAG
. 您将不得不以旧方式进行操作。基于表结构,以下查询应该可以帮助您入门:
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 中的子查询为每一行计算上个月的总和。
推荐阅读
- eof - 文件结束语法-Reg
- android - NativeActivity vs NDK JNI vs SDK
- javascript - 条纹结帐,付款后获取数据
- python-3.x - 加快 difflib 查找 get_close_matches() 函数
- flutter - 我正在使用 Flutter 文本字段(不是文本表单字段)制作温度转换器应用程序我需要限制多个点和多个符号 (+ - )?
- go - 使用泛型:运算符 == 未为 T 定义
- python - 安装 Nashpy 库时缺少 requirements.txt
- java - Android:BLE清除取消自动连接
- python - django-admin 显示错误,我该如何解决?
- python - MSINT - 图像分类 - 值错误不兼容的形状