Pergunta

À procura de uma consulta no SQL do Informix que irá simular função group_concat do MySQL.

O que group_concat do MySQL faz é que cria uma enumeração de todos os membros do grupo.

Assim, com os dados da seguinte forma:

orderid:itemName:price
      1:Paper   :10
      1:Pen     :5
      2:Sugar   :15

e a seguinte consulta:

select group_concat(itemName), sum(price)
from order_details
group by orderid

produziria:

items    :price
Paper,Pen:15
Sugar    :15

O que seria mais eficiente maneira de conseguir isso em Informix? Será que definitivamente tem que usar um procedimento armazenado?

Foi útil?

Solução

Você teria que definir um agregado definido pelo usuário para fazer isso. Que tem quatro partes - quatro funções (procurar CREATE AGGREGATE na IDS 12.10 Centro de Informação ):

  1. Initializer (INIT)
  2. Iterator (ITER)
  3. Combine (Combinar)
  4. Finalizador (FINAL)

Essa é a terminologia oficial nas capitais, e é moderadamente intuitiva. Pense de calcular uma média.

  1. Initializer: soma set = 0; N = 0
  2. Iterator: soma set + = x; N ++
  3. Combiner: soma set = sum1 + sum2; conjunto N = N1 + N2
  4. Finalizer: resultado = soma / N - com N = 0 (zero-dividir) controlos

O combinador é usado para combinar os resultados intermediários de execução paralela; cada execução paralela começa com a iteração e gera resultados intermédios. Quando os completa a execução paralelas, os conjuntos distintos de valores são combinados com o combinador.

Você pode escrever código análogo na IDS -. Usando procedimentos armazenados ou C ou Java UDRs

Veja a pergunta SO Mostre uma relação um para muitos como 2 colunas -. 1 linha exclusiva (ID & lista separada por vírgula) para uma GROUP_CONCAT baseada em string () função implementada no Informix

Outras dicas

Não há dúvida nenhuma função embutida no Informix para fazer isso. Faz quaisquer outros RDBMS tradicionais têm uma função de agregação tão bizarra? Ordenar por uma coluna não seleccionados para uma consulta é um pouco duvidoso, mas o agrupamento? Isso é um novo para mim.

Você teria que escrever um procedimento armazenado ou UDR para gerar tal conjunto de dados a. Para ser honesto, eu não tentaria isso no banco de dados. Parece uma tarefa mais adequado para o consumidor desse produto (ou seja, a aplicação / webapp / report-escritor etc).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top