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

PostgreSQL如何筛选出用户名至少变更过一次的账户ID

解决SQL查询用户名变更账户的问题

核心原理

你之前GROUP BY查询未生效,大概率是没有对用户名去重统计:如果直接统计每个账户的总记录数,会因为同一用户名下多次更新其他字段产生的重复行,导致所有账户都满足COUNT(*) >1的条件,不符合需求。
需求的判断逻辑和多账户跨时间复用用户名的场景无关,只需要判断**同一个账户(b列)是否存在至少2个不同的用户名(c列)**即可。

最简实现SQL

SELECT b
FROM accounthistory
GROUP BY b
HAVING COUNT(DISTINCT c) > 1;

逻辑说明

  • 按账户外键b分组聚合所有历史记录
  • COUNT(DISTINCT c) 统计每个账户下出现过的不重复用户名数量,自动忽略同一用户名下多次更新其他字段产生的重复行
  • HAVING子句筛选出用户名数量大于1的账户,就是你需要的发生过用户名变更的账户列表

可选适配方案

场景1:排除删除操作记录

如果不需要纳入DELETE操作的用户名记录,可增加过滤条件:

SELECT b
FROM accounthistory
WHERE e != 'DELETE'
GROUP BY b
HAVING COUNT(DISTINCT c) > 1;

场景2:兼容不支持COUNT(DISTINCT)的旧版数据库

可以先对账户+用户名的组合去重,再统计数量,效果和上述写法完全一致:

SELECT b
FROM (
    SELECT DISTINCT b, c
    FROM accounthistory
) AS account_user_map
GROUP BY b
HAVING COUNT(*) > 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:15:06