You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过SQL计算近24个月数据的总和及平均值?

针对你的SQL统计需求的实现方案

嘿,我来帮你搞定这个数据统计的需求!针对你数据库里的记录(字段:ID、Store_ID、Date、Sales),我会分两个核心需求,结合不同主流数据库的语法给出具体实现——毕竟不同数据库的日期处理函数差异不小~

一、计算从本月起往前推24个月内数据的总和与平均值

这里先明确范围:“从本月起往前推24个月”通常指当前日期往前回溯24个月的时间段(比如今天是2024-05-20,范围就是2022-05-20到2024-05-20);如果你的需求是过去24个完整自然月(比如2022-05到2024-04),我也会补充调整方式。

1. 整体统计(不分门店)

MySQL 写法

SELECT
    SUM(Sales) AS total_sales_last_24months,
    AVG(Sales) AS avg_sales_last_24months
FROM
    your_table_name
WHERE
    Date >= DATE_SUB(CURDATE(), INTERVAL 24 MONTH);

如果要限定为过去24个完整自然月(不含本月),可以把条件改成:

Date BETWEEN DATE_SUB(CURDATE(), INTERVAL 24 MONTH) AND LAST_DAY(CURDATE() - INTERVAL 1 MONTH)

PostgreSQL 写法

SELECT
    SUM(Sales) AS total_sales_last_24months,
    AVG(Sales) AS avg_sales_last_24months
FROM
    your_table_name
WHERE
    "Date" >= CURRENT_DATE - INTERVAL '24 months';

(注:PostgreSQL里Date是关键字,需要用双引号括起来)

SQL Server 写法

SELECT
    SUM(Sales) AS total_sales_last_24months,
    AVG(Sales) AS avg_sales_last_24months
FROM
    your_table_name
WHERE
    Date >= DATEADD(MONTH, -24, GETDATE());

2. 按门店分组统计

如果需要每个门店单独计算近24个月的总和与平均值,只需加上GROUP BY Store_ID即可,以MySQL为例:

SELECT
    Store_ID,
    SUM(Sales) AS total_sales_last_24months,
    AVG(Sales) AS avg_sales_last_24months
FROM
    your_table_name
WHERE
    Date >= DATE_SUB(CURDATE(), INTERVAL 24 MONTH)
GROUP BY
    Store_ID;

其他数据库只需替换对应的日期函数即可。

二、计算过去24个月及以上数据的总和

这个需求就是筛选出早于近24个月起始日期的数据,然后求和,同样分两种场景:

1. 整体统计(不分门店)

MySQL 写法

SELECT
    SUM(Sales) AS total_sales_older_than_24months
FROM
    your_table_name
WHERE
    Date < DATE_SUB(CURDATE(), INTERVAL 24 MONTH);

PostgreSQL 写法

SELECT
    SUM(Sales) AS total_sales_older_than_24months
FROM
    your_table_name
WHERE
    "Date" < CURRENT_DATE - INTERVAL '24 months';

SQL Server 写法

SELECT
    SUM(Sales) AS total_sales_older_than_24months
FROM
    your_table_name
WHERE
    Date < DATEADD(MONTH, -24, GETDATE());

2. 按门店分组统计

同样加上GROUP BY Store_ID即可,以PostgreSQL为例:

SELECT
    Store_ID,
    SUM(Sales) AS total_sales_older_than_24months
FROM
    your_table_name
WHERE
    "Date" < CURRENT_DATE - INTERVAL '24 months'
GROUP BY
    Store_ID;

小提示

  • 记得把your_table_name替换成你实际的表名;
  • 如果你的Date字段是字符串类型(不推荐),需要先转换成日期格式,比如MySQL用STR_TO_DATE(Date, '%Y-%m-%d'),确保日期比较的准确性;
  • 如果需要精确到“本月起始往前推24个月”(比如从2022-05-01到2024-05-31),可以调整日期条件,比如MySQL用Date >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 24 MONTH), '%Y-%m-01')

内容的提问来源于stack exchange,提问作者user9384107

火山引擎 最新活动