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

技术求助:每日TOP贡献页面订阅占比统计及页面名称补充需求

解决方法:补充每日最高贡献页面的名称

你的核心问题是原SQL仅计算了每日最高订阅量及其占比,但无法关联到对应的页面名称——因为按P_date分组后,PageName不在分组字段中,直接添加会导致结果不准确(不同数据库的处理逻辑可能不一致,但通常无法正确匹配到订阅量最高的页面)。

我们可以通过窗口函数来精准定位每个日期订阅量最高的页面,同时保留你需要的占比计算逻辑。下面是修改后的SQL代码:

WITH daily_totals AS (
    -- 计算每个日期的总订阅量
    SELECT 
        P_date,
        SUM(Subscribes) AS daily_total
    FROM table1
    GROUP BY P_date
),
overall_total AS (
    -- 计算全时段的总订阅量
    SELECT SUM(Subscribes) AS full_total FROM table1
),
ranked_pages AS (
    -- 给每个日期下的页面按订阅量降序排名
    SELECT 
        P_date,
        PageName,
        Subscribes,
        ROW_NUMBER() OVER (PARTITION BY P_date ORDER BY Subscribes DESC) AS rank_num
    FROM table1
)
-- 筛选出每日排名第一的页面,计算占比
SELECT 
    rp.P_date,
    rp.PageName,
    FORMAT(rp.Subscribes / dt.daily_total, '.00%') AS '当日订阅占比',
    FORMAT(rp.Subscribes / ot.full_total, '.00%') AS '全时段订阅占比'
FROM ranked_pages rp
JOIN daily_totals dt ON rp.P_date = dt.P_date
CROSS JOIN overall_total ot
WHERE rp.rank_num = 1
ORDER BY rp.P_date;

代码说明:

  • daily_totals:单独计算每个日期的总订阅量,用于后续计算当日占比。
  • overall_total:计算全时段的总订阅量,避免在主查询中重复执行子查询,提升效率。
  • ranked_pages:使用ROW_NUMBER()窗口函数,按日期分组(PARTITION BY P_date),并对每个分组内的页面按订阅量降序排名,排名第一的就是当日贡献最高的页面。
  • 最后关联三个CTE,筛选出排名第一的记录,格式化占比为百分比格式。

额外说明:

如果同一天存在多个页面订阅量并列最高的情况,ROW_NUMBER()只会返回其中一个。若需要返回所有并列第一的页面,只需将ROW_NUMBER()替换为RANK()或DENSE_RANK()即可。

内容的提问来源于stack exchange,提问作者sammy ben menahem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:27:27