如何对SQL活动数据进行聚合,按日期统计不同用户类型的总人数
SQL聚合统计调整方案
你可以通过条件聚合的方式实现需求,调整后的SQL语句如下:
SELECT A.ReportRefreshDate, TotalDesigners = COUNT(DISTINCT CASE WHEN U.Designer = 1 THEN A.UserId END), TotalRespondents = COUNT(DISTINCT CASE WHEN U.Respondent = 1 THEN A.UserId END) FROM Activities A INNER JOIN Users ON LOWER(Users.UserPName) = LOWER(A.UserId) INNER JOIN ActiviesUserTypes U ON Operation = U.ActionName WHERE A.TId=4 AND Users.Branch='LLA' AND (U.Designer=1 OR U.Respondent=1) AND A.ReportRefreshDate between DateAdd(DD,-200,GETDATE() ) and GETDATE() GROUP BY A.ReportRefreshDate ORDER BY A.ReportRefreshDate
逻辑说明
- 保留了你原有所有的联表规则、过滤条件,仅修改了返回字段和新增分组逻辑
- 按
ReportRefreshDate分组实现日期维度的聚合统计 - 使用
COUNT(DISTINCT + CASE WHEN)的条件聚合逻辑,分别统计两类用户的去重数量,避免同一个用户同一天多次操作被重复计数 - 若你需要按自然天统计(忽略时分秒),只需将
SELECT和GROUP BY后的A.ReportRefreshDate替换为CAST(A.ReportRefreshDate AS DATE)即可
内容的提问来源于stack exchange,提问作者dot
相关产品推荐
相关产品推荐

