SQL技术问询:统计满足时间戳前缀+多值条件的用户组数量
统计符合特定条件的用户数量解决方案
需求说明
需要统计同时满足以下两个条件的用户总数:
- 该用户的所有记录中,
timestamp(示例中为timestp)字段均包含指定起始子串 - 该用户的
isCondition(示例中为isCond)字段存在至少2个不同的值
示例数据
先创建测试表并插入示例数据:
CREATE TABLE test ( user varchar(255), timestp varchar(255), isCond int ); INSERT INTO test (user, timestp, isCond) VALUES ("user1", "2024-02-08-11", 0); INSERT INTO test (user, timestp, isCond) VALUES ("user1", "2024-02-08-12", 1); INSERT INTO test (user, timestp, isCond) VALUES ("user2", "2024-02-08-13", 0); INSERT INTO test (user, timestp, isCond) VALUES ("user2", "2024-02-08-12", 0);
在这个示例中,只有user1符合条件,所以预期结果为1;若user2的两条记录isCond值不同,结果则为2。
解决方案
你当前的查询会返回每个符合条件用户的isCond去重计数,要统计这些用户的总数,只需将原查询作为子查询,外层用COUNT(*)统计行数即可:
SELECT COUNT(*) AS qualified_users FROM ( SELECT user FROM test WHERE timestp LIKE "2024-02-08%" GROUP BY user HAVING COUNT(DISTINCT isCond) >= 2 ) AS sub;
逻辑说明
- 子查询部分:按
user分组,筛选出timestp匹配指定前缀,且isCond去重后数量≥2的用户 - 外层查询:统计子查询返回的用户数量,即为符合条件的用户总数
内容的提问来源于stack exchange,提问作者btrballin
相关产品推荐
相关产品推荐

