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

按日期统计仅属Bucket A、仅属Bucket B及两者皆有的唯一用户数

实现思路与SQL方案

要完成这个按日期统计用户分属不同Bucket组的需求,我们可以通过两步聚合来实现,先处理重复数据,再对用户的Bucket归属进行分组统计:

第一步:去重并整理用户的Bucket归属

首先需要去除原始表中同一用户在同一日期同一Bucket下的重复记录,避免这些重复数据干扰后续的统计结果。接着,我们把每个用户在同一日期下所属的所有Bucket合并成一个标识(比如同时属于A和B的就标记为A+B)。

最终SQL代码(适用于SQL Server)

WITH user_buckets AS (
    -- 去重:每个日期-用户-Bucket只保留一条记录
    SELECT DISTINCT DateKey, [User], Bucket
    FROM your_table  -- 替换为你的实际表名
),
user_bucket_groups AS (
    -- 对每个日期的每个用户,合并其所属的Bucket
    SELECT 
        DateKey,
        [User],
        STRING_AGG(Bucket, '+') WITHIN GROUP (ORDER BY Bucket) AS BucketGroup
    FROM user_buckets
    GROUP BY DateKey, [User]
)
-- 按日期和Bucket组统计唯一用户数
SELECT 
    DateKey,
    BucketGroup AS Bucket,
    COUNT(DISTINCT [User]) AS UniqueUsers
FROM user_bucket_groups
GROUP BY DateKey, BucketGroup
ORDER BY DateKey DESC, Bucket;

代码解释

  • user_buckets CTE:通过DISTINCT过滤掉重复的记录,确保每个用户在同一日期的同一Bucket下只被统计一次。
  • user_bucket_groups CTE:使用STRING_AGG函数将同一用户在同一日期下的Bucket合并,排序后合并能保证A+B的格式统一,不会出现B+A的情况。
  • 最后一步分组统计:按日期和合并后的Bucket组分组,计算每个组的唯一用户数量,得到你期望的结果格式。

适配其他数据库的小改动

如果使用MySQL,需要把STRING_AGG替换为GROUP_CONCAT,并加上排序:

GROUP_CONCAT(Bucket ORDER BY Bucket SEPARATOR '+') AS BucketGroup

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:41:13