Databricks Delta Lake SQL按日期统计单行列示活跃与非活跃用户数问题
错误原因
你的查询存在两个核心问题:
- 子查询缺少与外层分组日期的关联条件:内层统计活跃/非活跃用户的子查询没有限定统计范围等于外层当前分组的日期,会直接统计全表所有日期下的符合条件的用户数,而非对应日期的数值。
- 子查询添加了不必要的
group by date:会返回多个日期的统计结果,外层查询无法匹配到对应日期的数值,最终所有行取到的都是全局汇总的结果,所以出现所有行Active都是3、Inactive都是1的问题。
另外注意你子查询中用的表名是User,实际存储数据的表是UsersData,要统一表名避免执行报错。
正确查询语句(Databricks Delta Lake SQL 环境兼容)
推荐使用效率更高的条件聚合写法,无需嵌套子查询即可实现需求:
SELECT Date, COUNT(DISTINCT CASE WHEN isActive = 1 THEN UserID END) AS Active, COUNT(DISTINCT CASE WHEN isActive = 0 THEN UserID END) AS Inactive, COUNT(DISTINCT UserID) AS Total FROM UsersData GROUP BY Date ORDER BY Date
逻辑说明:CASE WHEN会对不符合状态条件的行返回NULL,COUNT(DISTINCT)统计时会自动忽略NULL值,即可实现按日期分组统计对应状态的去重用户数,和你预期的输出结果完全一致。
内容的提问来源于stack exchange,提问作者Mr.Human
相关产品推荐
相关产品推荐

