如何使用MySQL统计当月每日收益金额

news/2025/1/31 9:13:51/

 如果要实现上图这个效果,这个SQL应该怎么写呢?

目录

1、实现思路

2、SQL实现


1、实现思路

首先,我们先实现查询当月每日的日期 。然后将查询结果与需要统计的表进行左连接即可。

SELECT DATE(DATE_SUB(CURRENT_DATE(), INTERVAL (DAY(CURRENT_DATE())-1) DAY) + INTERVAL (t4.i*1000 + t3.i*100 + t2.i*10 + t1.i) DAY) AS date
FROM(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t1,(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t2,(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t3,(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t4
WHEREDATE(DATE_SUB(CURRENT_DATE(), INTERVAL (DAY(CURRENT_DATE())-1) DAY) + INTERVAL (t4.i*1000 + t3.i*100 + t2.i*10 + t1.i) DAY) <= LAST_DAY(CURRENT_DATE())

 比如我的表结构是这样的。

 2、SQL实现

SELECT dates.date, IFNULL(SUM(cms_recharge_record.amount), 0) AS total
FROM (SELECT DATE(DATE_SUB(CURRENT_DATE(), INTERVAL (DAY(CURRENT_DATE())-1) DAY) + INTERVAL (t4.i*1000 + t3.i*100 + t2.i*10 + t1.i) DAY) AS dateFROM(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t1,(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t2,(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t3,(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t4WHEREDATE(DATE_SUB(CURRENT_DATE(), INTERVAL (DAY(CURRENT_DATE())-1) DAY) + INTERVAL (t4.i*1000 + t3.i*100 + t2.i*10 + t1.i) DAY) <= LAST_DAY(CURRENT_DATE())
) AS dates
LEFT JOIN cms_recharge_record ON DATE(dates.date) = DATE(cms_recharge_record.create_time) AND MONTH(dates.date) = MONTH(cms_recharge_record.create_time)
GROUP BY dates.date
ORDER BY dates.date;

SQL解释:(解释来源于ChatGPT)

1、首先,使用子查询生成一个包含当月每天日期的临时表,子查询中的四个子查询(t1, t2, t3, t4)用于生成从0到9的数字序列,通过计算日期的偏移量来生成每天的日期。这样可以确保每天都有日期记录。

2、然后,使用左连接(LEFT JOIN)将临时表(dates)与cms_recharge_record表进行连接。连接条件是日期相等,并且月份相等。

3、使用IFNULL函数来处理当日没有收益记录的情况,将收益金额设置为0。

4、最后,使用GROUP BY对日期进行分组,并使用SUM函数计算每日的收益金额。

5、使用ORDER BY对日期进行排序,以确保结果按照日期的升序排列。

这样基本上就能达到我们的要求,最后将查询结果封装成自己需要的数据格式即可。


http://www.ppmy.cn/news/685316.html

相关文章

openGauss5.0单机版安装指南(企业版)

openGauss5.0单机版安装指南&#xff08;企业版&#xff09; 1.下载openGauss安装包 点击下载 2.准备安装环境 2.1修改/etc/selinux/config文件中的“SELINUX”值为“disabled”。 #使用VIM打开config文件。 vim /etc/selinux/config #修改“SELINUX”的值“disabled”&am…

分布式、服务化的ERP系统架构设计

ERP之痛 曾几何时&#xff0c;我混迹于电商、珠宝行业4年多&#xff0c;为这两个行业开发过两套大型业务系统&#xff08;ERP&#xff09;。作为一个ERP系统&#xff0c;系统主要功能模块无非是订单管理、商品管理、生产采购、仓库管理、物流管理、财务管理等等。作为一个管理系…

[春秋云镜]CVE-2021-40282靶场

声明&#xff1a;⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤&#xff0c;任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的&#xff0c;否则后果⾃⾏承担。所有渗透都需获取授权&#xff01; 靶场介绍 站长招商网内容管理系统简称 ZZCMS&#xff0c;由ZZCMS团队开…

linux kvm 安卓模拟器,安卓KVM内核编译教程(带中文注释)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 猎户座百分之百OK,高通碰运气吧,MTK基本8想了 1.This is a short guide to help you compile KVM support for your Android ARM device kernel and share your findings. Keep in mind the example below is specific for Sams…

银河麒麟桌面操作系统V10-常见运维问题类别:外设管理 03

目录 问题类别 3&#xff1a;外设管理 3.1 添加网络共享打印机后&#xff0c;无法进行打印 【适用版本】 【问题现象】 【解决方案】 方法 1&#xff1a;图形软件关闭防火墙。 方法 2&#xff1a;使用命令关闭防火墙。 3.2 系统设置共享打印机问题 【适用版本】 【问题…

ARM A9,三星猎户座4412学习笔记

终于把ADC实验解决了 以下是部分代码 // GPIO#define GPM4CON (*(volatile unsigned int *)0x110002E0)#define GPM4DAT (*(volatile unsigned int *)0x110002E4) #define GPA0CON (*(volatile unsigned int *)0x11400000) // MPLL #define MPLL_CON0 (*(volatile u…

【银河麒麟操作系统V10】【桌面和服务器】安装KVM

一、安装kvm 1.查看机器是否支持虚拟化 输入命令&#xff1a; #egrep -c (vmx|svm) /proc/cpuinfo //输出结果大于0即代表支持 2、安装kvm组件 输入命令&#xff1a; 桌面系统&#xff1a; #sudo apt-get install -y libvirt0 libvirt-daemon qemu qemu-kvm virt-man…

简单来说,我们常听到的 22nm、14nm、10nm 究竟是什么意思?

如题,先从大厂说起。目前芯片厂商有三类:IDM、Fabless、Foundry。 IDM(集成器件制造商)指 Intel、IBM、三星这种拥有自己的晶圆厂,集芯片设计、制造、封装、测试、投向消费者市场五个环节的厂商,一般还拥有下游整机生产。