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

SQL如何使用MAX()结合不同分组规则获取用户月度总访问及分产品访问量

问题解决方案

实现思路

你需要的acessos_geral(用户当月不区分产品的总访问天数)仅和用户、月份两个维度相关,不受产品分组的影响,有两种可行实现方案:

方案1:最简修改,复用原有逻辑

你原有代码内层的acessos_geral窗口函数已经按用户+月份分区计算,同一个用户同一个月的所有数据行的acessos_geral最大值是固定值,分组后取max本身逻辑是正确的,确认内层窗口计算无误即可得到正确结果。如果想要彻底避免分组维度的干扰,可以用方案2。

方案2:外层窗口函数单独计算总访问量(更稳定)

直接在外层查询时用窗口函数按用户+月份维度取最大值,完全不受产品分组的限制:

SELECT    
    max(acessos_origem) AS access_product,
    -- 按用户+月份分区取最大值,完全不受产品分组影响
    max(acessos_geral) OVER(PARTITION BY upper(USUARIO), MES_ANO) AS acessos_geral,
    upper(USUARIO) as USUARIO,
    ORIGEM,
    MES_ANO,
    EQUIPE,
    timestamp_format( to_char(DATA, 'MM/YYYY'), 'MM/YYYY') as DATA
FROM (
    SELECT 
        DENSE_RANK() OVER (PARTITION BY A.USUARIO, A.ORIGEM, A.MES_ANO ORDER BY A.DATA ASC) AS acessos_origem,
        DENSE_RANK() OVER (PARTITION BY A.USUARIO, A.MES_ANO ORDER BY A.DATA ASC) AS acessos_geral,
        USUARIO, 
        EQUIPE,
        ORIGEM,
        MES_ANO,
        DATA
    FROM (
        SELECT 
            EQUIPE, 
            USUARIO, 
            ORIGEM, 
            CONCAT(extract(month FROM data), '/', extract(year FROM data)) AS mes_ano, 
            data
        FROM db2i1c68.DADOS_USUARIOS_PLATAFORMA_BBDATA a 
        WHERE usuario = 'bigbbd01'
    )a 
)b 
WHERE MES_ANO = '7/2020' 
GROUP BY upper(USUARIO) , ORIGEM, MES_ANO, EQUIPE, timestamp_format( to_char(DATA, 'MM/YYYY'), 'MM/YYYY')

逻辑说明

  • access_product字段按用户+月份+产品分组后取每个产品的最大访问日排名,得到单产品当月的访问天数
  • acessos_geral字段通过窗口函数按用户+月份分区取全局最大值,无论分组维度是否包含产品,该值都是用户当月全量访问天数,完全符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:30:01