postgres functions ejemplos array_to_string array_agg array agg postgresql array-agg

functions - PostgreSQL array_agg order



postgresql boolean aggregate functions (2)

Tabla ''animales'':

animal_name animal_type Tom Cat Jerry Mouse Kermit Frog

Consulta:

SELECT array_to_string(array_agg(animal_name),'';'') animal_names, array_to_string(array_agg(animal_type),'';'') animal_types FROM animals;

Resultado Esperado:

Tom;Jerry;Kerimt, Cat;Mouse;Frog OR Tom;Kerimt;Jerry, Cat;Frog;Mouse

¿Puedo estar seguro de que el orden en la primera función agregada siempre será el mismo que en el segundo? Quiero decir que no me gustaría obtener:

Tom;Jerry;Kermit, Frog;Mouse,Cat


Use una ORDEN POR, como este ejemplo del manual :

SELECT array_agg(a ORDER BY b DESC) FROM table;


Si tiene una versión de PostgreSQL <9.0, entonces:

De: http://www.postgresql.org/docs/8.4/static/functions-aggregate.html

En la implementación actual, el orden de la entrada en principio no está especificado. Sin embargo, el suministro de los valores de entrada desde una subconsulta ordenada funcionará. Por ejemplo:

SELECCIONE xmlagg (x) FROM (SELECCIONE x DESDE la prueba ORDER BY y DESC) AS tabulación;

Entonces en tu caso escribirías:

SELECT array_to_string(array_agg(animal_name),'';'') animal_names, array_to_string(array_agg(animal_type),'';'') animal_types FROM (SELECT animal_name, animal_type FROM animals) AS x;

La entrada al array_agg estaría entonces desordenada, pero sería la misma en ambas columnas. Y si lo desea, podría agregar una cláusula ORDER BY a la subconsulta.