[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