MySQL上月与本月的数据对比(mysql 上月本月)

MySQL:上月与本月的数据对比

在实际开发中,我们经常需要进行数据对比来得知业务数据的增长或下降情况。针对这种需求,本文将介绍使用MySQL来完成上月与本月的数据对比。

一、创建测试数据和表结构

我们需要创建一张表来存放测试数据。我们以订单表为例,表结构如下:

CREATE TABLE `orders` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`order_num` varchar(50) NOT NULL COMMENT ‘订单编号’,

`order_date` datetime NOT NULL COMMENT ‘下单时间’,

`order_amount` decimal(10,2) NOT NULL COMMENT ‘订单金额’,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT=’订单表’;

然后我们插入一些测试数据:

INSERT INTO `orders` (`order_num`, `order_date`, `order_amount`)

VALUES

(‘2022110001’, ‘2022-11-01 00:00:00’, 100.00),

(‘2022110002’, ‘2022-11-02 00:00:00’, 200.00),

(‘2022110003’, ‘2022-11-03 00:00:00’, 300.00),

(‘2022110004’, ‘2022-11-04 00:00:00’, 400.00),

(‘2022110005’, ‘2022-11-05 00:00:00’, 500.00),

(‘2022120001’, ‘2022-12-01 00:00:00’, 600.00),

(‘2022120002’, ‘2022-12-02 00:00:00’, 700.00),

(‘2022120003’, ‘2022-12-03 00:00:00’, 800.00),

(‘2022120004’, ‘2022-12-04 00:00:00’, 900.00),

(‘2022120005’, ‘2022-12-05 00:00:00’, 1000.00);

二、计算上月和本月的订单总金额

我们可以使用MySQL的函数MONTH和YEAR来获取订单日期中的年份和月份。这样我们就可以过滤出上月和本月的订单数据,并分别计算它们的订单总金额。

SELECT

SUM(CASE

WHEN YEAR(order_date) = YEAR(NOW()) AND MONTH(order_date) = MONTH(NOW()) THEN order_amount

ELSE 0

END) AS `本月订单总金额`,

SUM(CASE

WHEN YEAR(order_date) = YEAR(NOW()) AND MONTH(order_date) = MONTH(NOW())-1 THEN order_amount

ELSE 0

END) AS `上月订单总金额`

FROM

orders;

通过上述SQL语句,我们可以得到上月和本月的订单总金额。这样,我们就可以通过比较这两个值,得知业务数据的增长或下降情况了。

三、代码演示

以下是完整的代码实现,您可以直接拷贝运行:

— 创建订单表

CREATE TABLE `orders` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`order_num` varchar(50) NOT NULL COMMENT ‘订单编号’,

`order_date` datetime NOT NULL COMMENT ‘下单时间’,

`order_amount` decimal(10,2) NOT NULL COMMENT ‘订单金额’,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT=’订单表’;

— 插入测试数据

INSERT INTO `orders` (`order_num`, `order_date`, `order_amount`)

VALUES

(‘2022110001’, ‘2022-11-01 00:00:00’, 100.00),

(‘2022110002’, ‘2022-11-02 00:00:00’, 200.00),

(‘2022110003’, ‘2022-11-03 00:00:00’, 300.00),

(‘2022110004’, ‘2022-11-04 00:00:00’, 400.00),

(‘2022110005’, ‘2022-11-05 00:00:00’, 500.00),

(‘2022120001’, ‘2022-12-01 00:00:00’, 600.00),

(‘2022120002’, ‘2022-12-02 00:00:00’, 700.00),

(‘2022120003’, ‘2022-12-03 00:00:00’, 800.00),

(‘2022120004’, ‘2022-12-04 00:00:00’, 900.00),

(‘2022120005’, ‘2022-12-05 00:00:00’, 1000.00);

— 查询上月和本月的订单总金额

SELECT

SUM(CASE

WHEN YEAR(order_date) = YEAR(NOW()) AND MONTH(order_date) = MONTH(NOW()) THEN order_amount

ELSE 0

END) AS `本月订单总金额`,

SUM(CASE

WHEN YEAR(order_date) = YEAR(NOW()) AND MONTH(order_date) = MONTH(NOW())-1 THEN order_amount

ELSE 0

END) AS `上月订单总金额`

FROM

orders;

通过以上代码,我们可以得知上月和本月的订单总金额。如果需要查询更多相关业务数据,请根据实际需求进行拓展。


数据运维技术 » MySQL上月与本月的数据对比(mysql 上月本月)