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

如何用SQL按月份计算页面访问量的同比增减百分比?

实现同比访问量增减百分比的SQL查询

以下是完善后的SQL查询语句,支持输入指定年份,计算该年份各月访问量相较于上一年同期的增减百分比:

-- 可替换为目标年份,或使用变量参数化
DECLARE @CurrentYear INT = 2023;

WITH MonthlyVisits AS (
    SELECT
        YEAR([DateTime]) AS VisitYear,
        MONTH([DateTime]) AS MonthNum,
        FORMAT([DateTime], 'MMMM') AS MonthName,
        COUNT(*) AS VisitorCount
    FROM [BasicCore.VisitorCounter]
    GROUP BY YEAR([DateTime]), MONTH([DateTime]), FORMAT([DateTime], 'MMMM')
)
SELECT
    mv_current.MonthName AS [Month],
    mv_current.VisitorCount AS [CounterOfVisitors],
    CASE
        -- 处理上年同期无访问量的情况,避免除以0错误
        WHEN mv_prev.VisitorCount IS NULL THEN '无上年数据'
        WHEN mv_prev.VisitorCount = 0 THEN 'N/A'
        ELSE CONCAT(ROUND(((mv_current.VisitorCount - mv_prev.VisitorCount) * 100.0 / mv_prev.VisitorCount), 2), '%')
    END AS [Percentage]
FROM MonthlyVisits mv_current
LEFT JOIN MonthlyVisits mv_prev
    ON mv_current.MonthNum = mv_prev.MonthNum
    AND mv_current.VisitYear = mv_prev.VisitYear + 1
WHERE mv_current.VisitYear = @CurrentYear
ORDER BY mv_current.MonthNum;

关键逻辑说明:

  • CTE MonthlyVisits:先统计所有年份的月度访问量,包含年份、月份数字(用于排序和关联)、月份名称、访问量,为后续同比计算做基础。
  • 自关联匹配上年数据:通过LEFT JOIN关联当前年份和上一年的同月份数据,确保即使上年无数据,当前年的记录仍能正常显示。
  • 百分比计算:
    • 若上年无对应月份数据,显示无上年数据;
    • 若上年访问量为0,显示N/A避免除以0错误;
    • 正常情况计算增减幅度,保留两位小数并添加百分号。
  • 排序:按MonthNum排序,保证月份按自然顺序展示(避免文本格式的月份名称排序混乱)。

内容的提问来源于stack exchange,提问作者Matías Alejandro Novillo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:36:59