You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求SQL查询语句:对比单个周六总销售额与全年周六平均总销售额

对比指定周六销售额与全年周六平均销售额的SQL查询

嘿,这就帮你搞定这个需求!下面我会用清晰的逻辑编写查询语句,还会适配不同主流数据库的语法差异,让你直接能用。

核心思路

我们分三步来实现:

  • 第一步:计算每个周六的总销售额(按日期分组)
  • 第二步:基于第一步的结果,计算全年所有周六的平均总销售额
  • 第三步:把指定周六的销售额和这个平均值关联起来,做直观对比

通用SQL方案(以PostgreSQL/标准SQL为例)

用公共表表达式(CTE)来拆分逻辑,可读性更强:

WITH weekly_saturday_sales AS (
    -- 计算每个周六的总销售额
    SELECT
        DATE_TRUNC('day', ts) AS sale_date,
        SUM(quantity * unit_price) AS total_sales
    FROM
        your_table_name  -- 替换成你的实际表名
    WHERE
        EXTRACT(DOW FROM ts) = 6  -- DOW=6代表周六(一周从周日开始计数)
    GROUP BY
        DATE_TRUNC('day', ts)
),
average_saturday_sales AS (
    -- 计算全年所有周六的平均总销售额
    SELECT
        AVG(total_sales) AS avg_weekly_sales
    FROM
        weekly_saturday_sales
)
-- 对比指定周六与平均值
SELECT
    w.sale_date,
    w.total_sales AS target_saturday_sales,
    a.avg_weekly_sales,
    -- 新增差值和百分比字段,让对比更直观
    w.total_sales - a.avg_weekly_sales AS sales_diff_from_avg,
    ROUND((w.total_sales / a.avg_weekly_sales - 1) * 100, 2) AS sales_pct_diff_from_avg
FROM
    weekly_saturday_sales w
CROSS JOIN
    average_saturday_sales a
WHERE
    w.sale_date = '2019-01-12';  -- 替换成你要对比的目标周六日期

不同数据库的适配调整

MySQL 版本

MySQL里的日期函数略有不同,调整后代码如下:

WITH weekly_saturday_sales AS (
    SELECT
        DATE(ts) AS sale_date,
        SUM(quantity * unit_price) AS total_sales
    FROM
        your_table_name
    WHERE
        DAYOFWEEK(ts) = 7  -- MySQL中7代表周六(1是周日)
    GROUP BY
        DATE(ts)
),
average_saturday_sales AS (
    SELECT
        AVG(total_sales) AS avg_weekly_sales
    FROM
        weekly_saturday_sales
)
SELECT
    w.sale_date,
    w.total_sales AS target_saturday_sales,
    a.avg_weekly_sales,
    w.total_sales - a.avg_weekly_sales AS sales_diff_from_avg,
    ROUND((w.total_sales / a.avg_weekly_sales - 1) * 100, 2) AS sales_pct_diff_from_avg
FROM
    weekly_saturday_sales w
CROSS JOIN
    average_saturday_sales a
WHERE
    w.sale_date = '2019-01-12';

SQL Server 版本

SQL Server需要先设置周起始日,避免日期判断出错:

-- 设置周日为一周的第一天,确保周六是第7天
SET DATEFIRST 7;

WITH weekly_saturday_sales AS (
    SELECT
        CAST(ts AS DATE) AS sale_date,
        SUM(quantity * unit_price) AS total_sales
    FROM
        your_table_name
    WHERE
        DATEPART(dw, ts) = 7  -- 周六
    GROUP BY
        CAST(ts AS DATE)
),
average_saturday_sales AS (
    SELECT
        AVG(total_sales) AS avg_weekly_sales
    FROM
        weekly_saturday_sales
)
SELECT
    w.sale_date,
    w.total_sales AS target_saturday_sales,
    a.avg_weekly_sales,
    w.total_sales - a.avg_weekly_sales AS sales_diff_from_avg,
    ROUND((w.total_sales / a.avg_weekly_sales - 1) * 100, 2) AS sales_pct_diff_from_avg
FROM
    weekly_saturday_sales w
CROSS JOIN
    average_saturday_sales a
WHERE
    w.sale_date = '2019-01-12';

关键说明

  • 记得把代码里的your_table_name替换成你实际使用的表名
  • 目标日期'2019-01-12'要换成你需要对比的那个周六的日期
  • 新增的sales_diff_from_avg(差值)和sales_pct_diff_from_avg(百分比差异)字段能帮你快速看出指定周六的销售表现和平均水平的差距

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:49:20