traer solo repetir repetidos registros mostrar menos evitar eliminar duplicados dejando consulta agrupar sql postgresql duplicates aggregate-functions window-functions

repetir - sql eliminar registros repetidos dejando solo 1



Encontrar filas con valores duplicados en una columna (3)

Sugiero una función de ventana en una subconsulta:

SELECT author_id, author_name -- omit the name here, if you just need ids FROM ( SELECT author_id, author_name , count(*) OVER (PARTITION BY author_name) AS ct FROM author_data ) sub WHERE ct > 1;

Reconocerá el count() funciones agregadas básicas count() . Se puede convertir en una función de ventana al agregar una cláusula OVER , como cualquier otra función de agregado.

De esta manera cuenta las filas por partición . Voilá.

En versiones anteriores sin funciones de ventana (v.8.3 o anterior) - o en general - esta alternativa funciona bastante rápido:

SELECT author_id, author_name -- omit name, if you just need ids FROM author_data a WHERE EXISTS ( SELECT 1 FROM author_data a2 WHERE a2.author_name = a.author_name AND a2.author_id <> a.author_id );

Si le preocupa el rendimiento, agregue un índice en author_name .

Tengo una tabla author_data :

author_id | author_name ----------+---------------- 9 | ernest jordan 14 | k moribe 15 | ernest jordan 25 | william h nailon 79 | howard jason 36 | k moribe

Ahora necesito el resultado como:

author_id | author_name ----------+---------------- 9 | ernest jordan 15 | ernest jordan 14 | k moribe 36 | k moribe

Es decir, necesito el author_id para que los nombres tengan apariencias duplicadas. He intentado esta declaración:

select author_id,count(author_name) from author_data group by author_name having count(author_name)>1

Pero no está funcionando. ¿Cómo puedo conseguir esto?


Ya estás a mitad de camino. Solo necesita usar los Author_IDs identificados y obtener el resto de los datos.

prueba esto..

SELECT author_id, author_name FROM author_data WHERE author_id in (select author_id from author_data group by author_name having count(author_name)>1)


Puede unirse a la tabla en sí mismo, lo que se puede lograr con cualquiera de las siguientes consultas:

SELECT a1.author_id, a1.author_name FROM authors a1 CROSS JOIN authors a2 ON a1.author_id <> a2.author_id AND a1.author_name = a2.author_name; -- 9 |ernest jordan -- 15|ernest jordan -- 14|k moribe -- 36|k moribe --OR SELECT a1.author_id, a1.author_name FROM authors a1 INNER JOIN authors a2 WHERE a1.author_id <> a2.author_id AND a1.author_name = a2.author_name; -- 9 |ernest jordan -- 15|ernest jordan -- 14|k moribe -- 36|k moribe