当前位置: 首页 > news >正文

MYSQL求月份同比数据和环比数据

1.需求题目如下 

22f42bfc27c0487793f8f8ff6eee737c.jpeg

1.首先求出每月每个account_id 对应的amount金额

 2f0efb36446544d0b5e55a500f759764.png

2.利用表自关联,获取上月,上年对应月份及金额,

关联条件利用 主表月份-1个月=上月月份 和 主表月份-1年=上年月份

70b9261cd5854f588cb3dcf520dffb88.png

3.最后求同比和环比

 b224ab3addc14daa8a7ba427920f92f8.png

附代码及测试数据

CREATE TABLE transactions (  transaction_id VARCHAR(255),  account_id VARCHAR(255),  amount DECIMAL(10, 2),  transaction_date DATE  
);INSERT INTO transactions (transaction_id, account_id, amount, transaction_date) VALUES  
('0C', 'C1', 100.00, '2021-01-15'),  
('10', 'C1', 150.00, '2021-02-15'),  
('01', 'C2', 200.00, '2021-03-15'),  
('02', 'C2', 250.00, '2021-04-15'),  
('03', 'C1', 300.00, '2022-01-20'),  
('04', 'C1', 350.00, '2022-02-20'),  
('05', 'C2', 400.00, '2021-02-18'),  
('06', 'C2', 450.00, '2021-03-18'),  
('07', 'C1', 500.00, '2021-04-18'),  
('08', 'C2', 550.00, '2022-02-18');WITH MonthlyTotals AS (SELECTaccount_id,substr(transaction_date,1,7) AS month_year,SUM(amount) AS total_amountFROMtransactionsGROUP BYaccount_id,substr(transaction_date,1,7)
),
LaggedMonthlyTotals AS (SELECTmt.account_id,mt.month_year,mt.total_amount,sy.month_year as month_year_sy,sn.month_year as month_year_sn,sy.total_amount as prev_month_amount,sn.total_amount as prev_year_same_month_amountFROMMonthlyTotals mtleft join MonthlyTotals sy on mt.account_id=sy.account_id and DATE_FORMAT(  DATE_SUB(STR_TO_DATE(CONCAT(mt.month_year, '-01'), '%Y-%m-%d'), INTERVAL 1 Month ), '%Y-%m')=sy.month_yearleft join MonthlyTotals sn on mt.account_id=sn.account_id and DATE_FORMAT(  DATE_SUB(STR_TO_DATE(CONCAT(mt.month_year, '-01'), '%Y-%m-%d'), INTERVAL 1 YEAR ), '%Y-%m')=sn.month_year
)
SELECTlmt.account_id,lmt.month_year,lmt.total_amount,-- 计算环比百分比CASEWHEN lmt.prev_month_amount IS NULL THEN NULLELSE ((lmt.total_amount - lmt.prev_month_amount) / lmt.prev_month_amount) * 100END AS 环比,-- 计算同比百分比CASEWHEN lmt.prev_year_same_month_amount IS NULL THEN NULLELSE ((lmt.total_amount - lmt.prev_year_same_month_amount) / lmt.prev_year_same_month_amount) * 100END AS 同比
FROMLaggedMonthlyTotals lmtorder by account_id,month_year;

 

 


http://www.mrgr.cn/news/36944.html

相关文章:

  • PPP点对点协议(Point-to-Point Protocol)
  • KVM 安装 Windows11
  • 电路知识1 电阻 电容
  • python 魔法方法简记
  • 如何使用ssm实现学生考勤管理系统的设计与实现+vue
  • 重修设计模式-行为型-责任链模式
  • 求n的阶乘的相反数(c语言)
  • sizeof计算……元素个数
  • 【RabbitMQ 项目】客户端:消费者模块
  • 国产游戏出海火热另一面:AI和API快速成长引发网络安全挑战
  • C语言进程
  • 对数转换同底公式证明
  • 立志最细,你是否知道,嵌入式开发常见系统名称及其含义!!!
  • 三、人物骨骼介绍
  • Ubuntu 22.04无法连接网络(网络图标丢失)解决方案
  • 大城市有哪些增加现金流的方式?
  • 2024.9.26 作业 +思维导图
  • Git常用方法——详解
  • windows 录音编码为flv格式时,pcm采样格式
  • element-plus 日历组件 Calendar设置每周第一天为周一-非国际化版