Cómo seleccionar y contar pares o tripletas de 5 columnas en PostgreSQL.
Tengo una tabla de PostgreSQL en la cual almaceno números en cinco columnas diferentes (digamos col1, col2, col3, col4, col5). En cada fila, los números almacenados son diferentes entre sí.
Quiero realizar una selección que me muestre las parejas que existen y cuántas veces aparecen (contar las veces que están presentes en las filas).
Ejemplo:
col1 | col2 | col3 | col4 | col5 |
---|---|---|---|---|
1 | 5 | 10 | 20 | 100 |
5 | 20 | 30 | 40 | 100 |
Resultados (algo más o menos así):
pareja | total |
---|---|
1,5 | 1 |
1,10 | 1 |
1,20 | 1 |
1,100 | 1 |
5,10 | 1 |
5,20 | 2 |
5,100 | 2 |
10,20 | 1 |
10,100 | 1 |
20,100 | 2 |
5,30 | 1 |
5,40 | 1 |
20,30 | 1 |
20,40 | 1 |
Puedo hacer una consulta SQL para ejecutar código en columnas específicas:
SELECT count (*) as total, col1, col2
FROM numbers
group by col1, col2;
Pero esto no me dará todas las combinaciones y no sé cómo obtener el resto de las parejas. Además, esto puede ser ineficiente en términos de rendimiento.
Cualquier ayuda será apreciada.
Saludos,
Miguel.
davy.ai
Para obtener todas las posibles parejas de números en las cinco columnas y contar su aparición, una posible solución es utilizar la función combinations del módulo itertools en Python.
Podemos consultar la base de datos para recuperar todos los valores distintos de cada columna, y luego utilizar la función combinations para generar todas las posibles parejas de valores. Para cada pareja, podemos consultar la base de datos para contar el número de filas donde ambos valores aparecen, y generar una tabla con los resultados.
Aquí hay un ejemplo de código en Python que hace esto:
Este código debería mostrar una tabla similar a la del cuestionario original. Ten en cuenta que este código asume que las columnas de números se llaman col1, col2, col3, col4, col5 en la base de datos. Si tienen nombres diferentes, deberás ajustar las consultas SQL en consecuencia.