Ejemplos y trucos de consultas a BD con SQLAlchemy

Uso de DISTINCT junto con ORDER BY para diferentes columnas En ocasiones es necesario hacer consultas que nos devuelvan un único resultado para el valor de una determinada columna, y además ordenar dichos resultados en base a una columna totalmente diferente. Este escenario presenta un problema: las columnas que hayan en la cláusula ORDER BY deben obligatoriamente ser las mismas que las de la cláusula DISTINCT. Y probablemente no queramos, o no podamos, poner las mismas columnas en ambas cláusulas, con lo cual nuestra consulta devolverá un error de este tipo: ...

May 12, 2021 · 6 min · José Luis Patiño Andrés

Seleccionar duplicados en PostgreSQL

La siguiente consulta devuelve elementos duplicados en table cuyos valores para las columnas column_1 y column_2 son idénticos: SELECT column_1, column_2, COUNT(*) FROM my_table GROUP BY column_1, column_2 HAVING count(*) > 1; Usando esta consulta, podríamos borrar todos los elementos duplicados de forma automática mediante esta otra consulta: DELETE FROM my_table AS main USING ( SELECT column_1, column_2, COUNT(*) FROM my_table GROUP BY (column_1, column_2) HAVING COUNT(*) > 1 ) AS duplicates WHERE main.column_1 = duplicates.column_1 AND main.column_2 = duplicates.column_2; SQLAlchemy Esta misma consulta se puede hacer mediante SQLAlchemy de la siguiente forma: session.execute( select( my_table.column_1, my_table.column_2, func.count(my_table.id).label("count") ).from(my_table).group_by(my_table.column_1).having( func.count(my_table.id) ).all()

October 12, 2018 · 1 min · José Luis Patiño Andrés