Question

Recherche dans SQL d'Informix d'une requête qui simule la group_concat fonction de MySQL.

Ce que MySQL <=> crée, c’est qu’il crée une énumération de tous les membres du groupe.

Donc, avec les données comme suit:

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

et la requête suivante:

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

produirait:

items    :price
Paper,Pen:15
Sugar    :15

Quel serait le moyen le plus efficace de réaliser cela dans Informix? Aurions-nous définitivement recours à une procédure stockée?

Était-ce utile?

La solution

Pour ce faire, vous devez définir un agrégat défini par l'utilisateur. Cela comporte quatre parties - quatre fonctions (recherche de CREATE AGGREGATE dans Centre d'informations IDS 12.10 ):

  1. Initialiseur (INIT)
  2. Itérateur (ITER)
  3. Combiner (COMBINE)
  4. Finalizer (FINAL)

C'est la terminologie officielle utilisée dans les capitales et elle est moyennement intuitive. Pensez à calculer une moyenne.

  1. Initialiseur: set sum = 0; N = 0
  2. Itérateur: set sum + = x; N ++
  3. Combiner: set sum = sum1 + sum2; définir N = N1 + N2
  4. Finalizer: resultat = somme / N - avec N = 0 contrôles (division du zéro)

Le combineur est utilisé pour combiner les résultats intermédiaires d'une exécution en parallèle. chaque exécution parallèle commence par l'itérateur et génère des résultats intermédiaires. Une fois l'exécution parallèle terminée, les ensembles de valeurs séparés sont combinés avec le combineur.

Vous pouvez écrire un code analogue dans IDS, à l'aide de procédures stockées, de CDR ou de UDR Java.

Voir la question SO Afficher une relation un à plusieurs sous forme de 2 colonnes & # 8212; 1 ligne unique (ID & Liste; liste séparée par des virgules) pour une fonction GROUP_CONCAT () basée sur des chaînes implémentée dans Informix.

Autres conseils

Il n’ya certainement pas de fonction intégrée dans Informix pour le faire. Est-ce qu'un autre SGBDR traditionnel a une fonction globale aussi bizarre? Trier par une colonne non sélectionnée dans une requête est un peu douteux, mais le regroupement? C'est un nouveau sur moi.

Il vous faudrait écrire une procédure stockée ou UDR pour générer un tel jeu de données. Pour être honnête, je ne tenterais pas ceci dans la base de données. Cela ressemble à une tâche mieux adaptée au consommateur de cette sortie (c’est-à-dire l’application / webapp / report-writer, etc.).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top