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

如何查询仅持有无效推送令牌的用户?求最优SQL查询语句

最优查询方案:筛选所有令牌均无效的用户

首先假设你的推送令牌数据表结构符合常规设计(表名暂定为user_push_tokens),核心字段包括:

  • user_id: 用户唯一标识
  • token: 推送令牌字符串
  • is_valid: 令牌有效性标记(0=无效,1=有效,或布尔值false/true)

核心查询语句(适用于多数关系型数据库)

写法1:统计有效令牌数量(逻辑更直观)

SELECT user_id
FROM user_push_tokens
GROUP BY user_id
HAVING COUNT(CASE WHEN is_valid = 1 THEN 1 END) = 0;

写法2:利用最大值判断(更简洁,适用于0/1标记场景)

SELECT user_id
FROM user_push_tokens
GROUP BY user_id
HAVING MAX(is_valid) = 0;

为什么这是最优方案?

  • 逻辑精准:严格筛选出所有令牌都无效的用户,会自动排除那些同时持有有效和无效令牌的用户(比如有部分有效令牌的用户1/2会被过滤掉)
  • 性能高效:避免了嵌套子查询或关联查询,直接通过GROUP BY+HAVING的聚合逻辑完成筛选,配合(user_id, is_valid)的联合索引可以实现快速分组统计
  • 兼容性强:几乎支持所有主流关系型数据库(MySQL、PostgreSQL、SQL Server等),仅需根据is_valid的实际类型微调(比如布尔值场景改成MAX(is_valid) = false)

额外优化建议

如果你的数据量较大,建议创建联合索引来加速查询:

CREATE INDEX idx_user_valid ON user_push_tokens(user_id, is_valid);

这个索引会大幅减少数据库的全表扫描开销,让分组和聚合计算更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:14:00