sql - tutorial - group_concat en Informix
informix download (2)
Ciertamente no hay una función incorporada en Informix para hacer esto. ¿Algún otro RDBMS convencional tiene una función agregada tan extraña? Ordenar por una columna no seleccionada en una consulta es un poco dudoso, pero la agrupación? Eso es nuevo para mí.
Debería escribir un procedimiento almacenado o UDR para generar dicho conjunto de datos. Para ser honesto, no intentaría esto en la base de datos. Parece una tarea que se adapta mejor al consumidor de esta salida (es decir, la aplicación / aplicación de Internet / escritor de informes, etc.).
Buscando una consulta en el SQL de Informix que simulará la función group_concat
de MySQL.
Lo que hace group_concat
de MySQL es crear una enumeración de todos los miembros del grupo.
Entonces con los datos de la siguiente manera:
orderid:itemName:price
1:Paper :10
1:Pen :5
2:Sugar :15
y la siguiente consulta:
select group_concat(itemName), sum(price)
from order_details
group by orderid
produciría:
items :price
Paper,Pen:15
Sugar :15
¿Cuál sería la forma más eficiente de lograr esto en Informix? ¿Definitivamente tendríamos que usar un procedimiento almacenado?
Tendría que definir un agregado definido por el usuario para hacer esto. Eso tiene cuatro partes: cuatro funciones (busque CREATE AGGREGATE en el Centro de información IDS 12.10 ):
- Inicializador (INIT)
- Iterador (ITER)
- Combine (COMBINAR)
- Finalizador (FINAL)
Esa es la terminología oficial en mayúsculas, y es moderadamente intuitiva. Piensa en calcular un promedio.
- Inicializador: establecer suma = 0; N = 0
- Iterador: establecer suma + = x; N ++
- Combinador: conjunto suma = suma1 + suma2; establecer N = N1 + N2
- Finalizador: resultado = suma / N - con N = 0 (cero-divide) cheques
El combinador se usa para combinar resultados intermedios de ejecución paralela; cada ejecución paralela comienza con el iterador y genera resultados intermedios. Cuando se completa la ejecución en paralelo, los conjuntos separados de valores se combinan con el combinador.
Puede escribir un código análogo en IDS, utilizando procedimientos almacenados o C o UDR Java.
Consulte la pregunta SO. Mostrar una relación de uno a muchos como 2 columnas: 1 fila única (ID y lista separada por comas) para una función GROUP_CONCAT () basada en cadenas implementada en Informix.