[FOSSGIS-Talk] Aufsummieren von Spalten im Ausdruckseditor
Frank Broniewski
hallo at frankbroniewski.com
Fr Nov 15 09:41:29 CET 2019
Moin Claas,
muss es unbedingt der Ausdruckseditor sein?
SQLite und damit auch QGIS kann Window functions [1] und eigentlich sollte der
PostGIS-Code auch in SQLite funktionieren. Hast du denn schon versucht, das
mit dem Datenbank-Manager und dem SQL-Fenster darin zu erledigen oder
eventuell als virtuellen Layer? Da kannst du ja auch SQL schreiben ...
QGIS 3.10 kommt mit SQLite 3.30, window functions gibt es seit 3.25.0
[1] https://www.sqlite.org/windowfunctions.html
LG
Frank
Am Montag, 4. November 2019, 12:50:35 CET schrieb Claas Leiner:
> Hallo Zusammenn,
>
> ich versuche gerade mit dem Ausdruckseditor das Aufsummieren
> von Spaltenwerten umzusetzen, komme aber zu keiner Lösung:
>
> Problemstellung:
>
> Es gibt eine Spalte "Id", die einfach eine Folge von Linenabschnitten
> beschreibt, eine Spalte "length" welche die Längen der Linienabschnitte
> abbildet. Außerdem gibt es die Spalte "bereich", mit der die einzelnen
> Bereiche benannt werden, für die die Aufsummierung umgesetzt werden soll.
>
> Jetzt soll für jeden Bereich eine Aufsummierung der Strecke ("length")
> je folgenden Abschnitt vorgenommen werden, so dass das Ergebnis mit der
> Laufsumme folgendermaßen aussieht:
>
> id length bereich laufsumme
> 1 1631.737272 4306 1631.737272
> 2 11.4693348 4306 1643.2066068
> 3 10.2346697 4306 1653.4412765
> 4 5.1664905 4306 1658.607767
> 5 5.0219197 4306 1663.6296867
> 6 10.4880995 4306 1674.1177862
> 7 57.6267049 4306 1731.7444911
> 8 220.8260778 4306 1952.5705689
> 9 310.3634339 4306 2262.9340028
> 10 121.3497062 4306 2384.283709
>
> In PostGis (leider nicht in den sqlite-versionen, die mit QGIS oder
> SpatiaLite ausgeliefert werden) lässt sich das mit Window-Funktionen
> umsetzen:
> ------
> SELECT
> id,
> "length",
> "bereich",
> SUM("length") OVER (ORDER BY id,bereich ASC) AS laufsumme
>
> FROM strassen
> ORDER BY id ASC.
>
> ---------
>
> Im Ausdruckseditor bin ich mit nicht zum Ziel gekommen. Am Ende habe ich
> die aufzusummierenden Abschnitte in Arrays geschrieben:
>
> -------------
> array_to_string(
>
> array_slice(
> ( array_agg( "length" , group_by:= "bereich" ) ),
> (minimum( "id" ,group_by:= "bereich" )) -1 , "id" -1
>
> )
> )
> ---------------------------------------------------------
>
> In der dritten Zeilte steht dann beispielsweise:
>
> 1631.737272,11.4693348,10.2346697
>
> Aber es gibt ja keine sum() Funktion ohne Agreggierung, mit der man auf
> den String zugreifen kann (max und min gibt es).
>
> Hat jemand eine Idee, wie sich die Auffsummierung im Ausdruckseditor
> umsetzen lässt?
>
> Viele Grüße,
>
> Claas
Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste