SQL选择一列中具有重复值的所有行

标签 sql postgresql select duplicates

我有一个 users 表,它在 employee_id 列中有重复的值。我需要列出所有具有重复 employee_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;

最佳答案

你可以使用窗口化的COUNT:

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

LiveDemo

或简单的IN:

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

LiveDemo2

或相关子查询:

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;

SqlFiddleDemo

关于SQL选择一列中具有重复值的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36384107/

相关文章:

php - mysql如何将同一个表的一个字段的数据复制到另一个字段

sql - 删除重复的源到目的地(例如,对于 2 个不同的条目(行),德里到孟买和孟买到德里,输出应该是一个)

sql - 多于一列的 MySql

sql - PostgreSQL 获取时间戳之间的时间差

javascript - 如果过滤返回空结果,过滤器不会显示消息而不是表格

mysql - 获取对帖子投票的用户

sql - 在 postgres json 字段中查询 json 键

ruby-on-rails - 仅将 JSON curl 请求的值保存到 RoR 中的 PG 数据库

mysql - Laravel 选择左连接查询

c++ - SQLite:如何选择一系列记录?