MySQL上个月和上上个月数据查询与分析
在数据分析和报表生成过程中,经常需要针对不同时间段的数据进行统计和分析。MySQL作为一种常用的数据库管理系统,提供了强大的数据查询和分析功能。本文将介绍如何使用MySQL查询上个月和上上个月的数据,并进行数据分析和可视化展示。
1. 查询上个月和上上个月的数据
在MySQL中,可以使用日期函数和条件语句来查询上个月和上上个月的数据。下面是一个示例表结构:
CREATE TABLE sales (
id INT PRIMARY KEY AUTO_INCREMENT,
product VARCHAR(50),
quantity INT,
date DATE
);
假设我们要查询上个月和上上个月的销售数据,可以使用以下代码:
-- 查询上个月的数据
SELECT product, SUM(quantity) AS total_quantity
FROM sales
WHERE date >= DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH)
AND date < DATE_FORMAT(NOW(), '%Y-%m-01')
GROUP BY product;
-- 查询上上个月的数据
SELECT product, SUM(quantity) AS total_quantity
FROM sales
WHERE date >= DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 2 MONTH)
AND date < DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH)
GROUP BY product;
上述代码中,我们使用了DATE_SUB
函数和DATE_FORMAT
函数来获取当前日期的上个月和上上个月的第一天,然后使用条件语句筛选出对应时间段的数据。最后,使用SUM
函数和GROUP BY
子句对销售数量进行求和和分组。
2. 数据分析与可视化展示
通过上述查询,我们可以获取上个月和上上个月的销售数据,接下来可以进行数据分析和可视化展示。这里我们使用Python和matplotlib库进行数据分析和绘图。
首先,我们需要连接MySQL数据库,并将查询结果导入到Pandas的DataFrame中:
import pandas as pd
import mysql.connector
# 连接MySQL数据库
cnx = mysql.connector.connect(user='root', password='123456',
host='localhost', database='mydatabase')
# 查询上个月的数据
query_last_month = """
SELECT product, SUM(quantity) AS total_quantity
FROM sales
WHERE date >= DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH)
AND date < DATE_FORMAT(NOW(), '%Y-%m-01')
GROUP BY product;
"""
df_last_month = pd.read_sql_query(query_last_month, cnx)
# 查询上上个月的数据
query_previous_month = """
SELECT product, SUM(quantity) AS total_quantity
FROM sales
WHERE date >= DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 2 MONTH)
AND date < DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH)
GROUP BY product;
"""
df_previous_month = pd.read_sql_query(query_previous_month, cnx)
# 关闭数据库连接
cnx.close()
接下来,我们可以使用DataFrame的数据进行分析和绘图。这里我们使用饼状图来比较上个月和上上个月的销售数量占比:
import matplotlib.pyplot as plt
# 计算上个月销售数量的占比
total_last_month = df_last_month['total_quantity'].sum()
df_last_month['percentage'] = df_last_month['total_quantity'] / total_last_month * 100
# 计算上上个月销售数量的占比
total_previous_month = df_previous_month['total_quantity'].sum()
df_previous_month['percentage'] = df_previous_month['total_quantity'] / total_previous_month * 100
# 绘制饼状图
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
# 绘制上个月销售数量的饼状图
axes[0].pie(df_last_month['percentage'], labels=df_last_month['product'],
autopct='%1.1f%%', startangle=90)
axes[0].set_aspect('equal')
axes[0].set_title('Last Month Sales')
# 绘制上上个月销售数量的饼状图
axes[1].pie(df_previous_month['percentage'], labels=df_previous_month['product'],
autopct='%1.1f%%', startangle=90)
axes[1].set_aspect('equal')
axes[1].set_title('Previous Month Sales')