我有一个users表,在employee_id列中有重复的值.我需要列出所有具有重复员工ID的行,以及它们的名称.我需要看到所有用户都有一个重复的employee_id,这样我就可以消除哪些值是有效的冲突.

SELECT name,employee_id  
FROM users;

name     | employee_id
-----------------------
jason      12345
tom        34567 
jane       12345
will       01020
bill       12345

我需要返回:

name       | employee_id
-------------------------
jason        12345
jane         12345
bill         12345

我看到了类似的问题,但我仍然无法获得所需的正确语法.下面我只得到一次机会.我需要所有重复employee_id次以上的事件.

SELECT employee_id, MAX(name) 
FROM users 
GROUP BY employee_id 
HAVING COUNT(employee_id) > 1;

推荐答案

您可以使用windowed COUNT:

SELECT sub.name, sub.employee_id
FROM (SELECT *, COUNT(*) OVER(PARTITION BY employee_id) AS c
      FROM users) AS sub
WHERE c > 1;

100

或者简单IN:

SELECT *
FROM users
WHERE employee_id IN (SELECT employee_id 
                      FROM users 
                      GROUP BY employee_id 
                      HAVING COUNT(employee_id) > 1);

100

或相关子查询:

SELECT name, employee_id
FROM users u
,LATERAL (SELECT COUNT(*) FROM users u2 WHERE u.employee_id = u2.employee_id) AS s(c)
WHERE c > 1;

100

Postgresql相关问答推荐

Select 所有数组类型和维度

为什么Postgres优化器切换到嵌套循环进行连接?

Psql:Windows 10上奇怪的错误输出编码

对 VOLATILE 函数的调用会 destruct SELECT 语句的原子性

使用 pgx 扫描范围类型

在 postgres/presto/AWS-Athena 中,与 array_agg( (col1, col2) ) 相反的是什么来获得每组多行?

使用psql的copy语句时如何压缩数据?

如何通过 DirectFunctionCall 发送 NULL 参数?

如何在plpgsql中找到一行中的最大值?

如何使用 PostgreSQL 数据库中的函数和存储过程从动态表中获取所有数据?参数传入的表名

如何使用 SQLAlchemy 将列默认设置为 PostgreSQL 函数?

Windows PSQL 命令行: is there a way to allow for passwordless login?

Postgres 默认按 id 排序 - worldship

如何在 PostgreSQL 中插入多行

是否可以在 CSV 格式的 Postgres COPY 命令中关闭报价处理?

PostgreSQL 嵌套 CTE 和 UNION

可以为空的列在 PostgreSQL 中是否会占用额外的空间?

在 postgresql 中对使用 array_agg 创建的文本聚合进行排序

在布尔字段上添加索引

Rails Migrations:试图将列的类型从字符串更改为整数