SQL: Laufendes Produkt bilden

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Zum Erstellen eines laufenden Produkts kann man die Tatsache nutzen, dass die Exponentialfunktion zur Basis e, angewandt auf der Summe der natürlichen Logarithmen, ihrem Produkt entspricht. In SQL-Dialekten mit Window-Funktionen können diese genutzt werden. Anderweitig ist man auf eine Unterabfrage, die einen skalaren Wert zurückgibt, angewiesen.

Wiki hinweis.png

Einschränkung: Logarithmen können in SQL nur auf positive Zahlen > 0 angewendet werden.


Hinweis für Access-Anwender
Um die folgende Abfrage selbst testen zu können, muss die Tabelle t1000 vorhanden sein.


Um z. B. das laufende Produkt der Zahlen 1 – 10 zu erhalten, kann so vorgegangen werden.

Lösung mittels Unterabfrage

SELECT n, ( SELECT exp( sum( log( n ) ) )
            FROM   t1000
            WHERE  n BETWEEN 1 AND a.n) AS lfd_prod
FROM   t1000 AS a
WHERE  n BETWEEN 1 AND 10
n lfd_prod
1 1,00000000
2 2,00000000
3 6,00000000
4 24,00000000
5 120,00000000
6 720,00000000
7 5040,00000000
8 40320,00000000
9 362880,00000000
10 3628800,00000001

Lösung mittels Window-Funktion

In PostgreSQL könnte man so vorgehen:

SELECT n,
       EXP( SUM( ln( n ) ) OVER ( ORDER BY n ) )::NUMERIC AS lfd_prod,
       EXP( SUM( ln( n ) ) OVER ( ORDER BY n ) )::INTEGER AS lfd_prod_int
FROM   generate_series( 1, 10) AS n
Wiki hinweis.png

Anmerkung: Wie man anhand der Ergenisse beider Versionen sieht, muss man Ungenauigkeiten bei der Berechnung einkalkulieren.


Das Ergebnis kann in diesem DBFiddle eingesehen werden.



Zurück zur Übersicht