Frage

Nach einer Abfrage in Informix SQL, die MySQL group_concat Funktion simulieren.

Was MySQL group_concat tut, ist es eine Aufzählung aller Mitglieder in der Gruppe erstellt.

So mit den Daten wie folgt:

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

und die folgende Abfrage:

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

erzeugen würde:

items    :price
Paper,Pen:15
Sugar    :15

Was wäre die effizienteste Weg, dies in Informix zu erreichen? Würden wir auf jeden Fall eine gespeicherte Prozedur verwenden?

War es hilfreich?

Lösung

würden Sie haben ein benutzerdefiniertes Aggregat zu definieren, dies zu tun. Das hat vier Teile - vier Funktionen (Suche nach CREATE AGGREGATE in der IDS 12.10 Info-Center ):

  1. Initializer (INIT)
  2. Iterator (ITER)
  3. Kombinieren (Combine)
  4. Finalizer (FINAL)

Das ist die offizielle Terminologie in Großbuchstaben, und es ist mäßig intuitiv. Denken Sie an einen Durchschnitt zu berechnen.

  1. Initializer: set sum = 0; N = 0
  2. Iterator: set sum + = x; N ++
  3. Combiner: set sum = sum1 + sum2; set N = N1 + N2
  4. Finalizer: Ergebnis = sum / N - mit N = 0 (Null-divide) prüft

Der Kombinierer verwendet wird, Zwischenergebnisse aus dem parallelen Ausführung zu kombinieren; jede parallele Ausführung beginnt mit der Iterator und erzeugt Zwischenergebnisse. Wenn die parallele Ausführung abgeschlossen ist, werden die einzelnen Sätze von Werten mit dem Kombinierer kombiniert werden.

Sie können analog Code in IDS schreiben - gespeicherte Prozeduren oder C oder Java UDRs mit

.

Sehen Sie die Frage SO Führen Sie eine eins-zu-Beziehung als 2 Spalten -. 1 einzigartige Reihe (ID & kommagetrennte Liste) für einen String-basierten GROUP_CONCAT () Funktion in Informix implementiert

Andere Tipps

Es ist sicherlich keine integrierte Funktion bei Informix, dies zu tun. Hat anderer Mainstream-RDBMS hat eine so bizarre Aggregatfunktion? Bestellung durch eine Spalte nicht in einer Abfrage ausgewählt ist etwas skeptisch, aber die Gruppierung? Das ist ein neuer auf mir.

würden Sie haben eine gespeicherte Prozedur oder UDR schreiben solch einen Datensatz zu erzeugen. Um ehrlich zu sein, würde ich versuchen, dies nicht in der Datenbank. Es sieht aus wie eine Aufgabe am besten geeignet für die Verbraucher dieser Ausgabe (dh der Anwendung / webapp / Bericht-Schreiber usw.).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top