【问题标题】:SQL to select all rows with duplicate values in one columnSQL选择一列中具有重复值的所有行
【发布时间】:2016-07-22 21:35:54
【问题描述】:

我有一个 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;

【问题讨论】:

    标签: sql postgresql select duplicates


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 2019-07-06
      • 2011-12-06
      相关资源
      最近更新 更多