Werte verschiedener Zeilen addieren

Fragen und Probleme zu PL/pgSQL.
Antworten
ruebezaehler
Neuer Benutzer
Beiträge: 8
Registriert: So 13. Mär 2016, 17:32

Werte verschiedener Zeilen addieren

Beitrag von ruebezaehler » Mi 22. Mai 2019, 23:03

Ich habe eine Tabelle mit den Spalten id serial, signal integer, typ integer, value double.
Der hier interesierende Typ hat die Werte -1, 0 1.

Code: Alles auswählen

id         signal         typ         value
-------------------------------------------
1              1            -1         -2.0
2              1             0         10.0
3              1             1          1.0
4              2             0          5.0  zu diesem Signal existieren keine Typen -1, 1
5              3             0         20.0
6              3            -1         -3.0
7              3            1           5.0
...
Ich möchte einen View erstellen, bei welchem pro Signal zum Wert vom Typ=-1 und Typ=1 jeweils der Wert vom Typ=0 addiert wird.
Das Ergebis wäre dann folgendes:

Code: Alles auswählen

id         signal         typ         value
----------------------------------------
id         signal         typ         value
-------------------------------------------
1              1            -1          8.0
2              1             0         10.0
3              1             1         11.0
4              2             0          5.0
5              3             0         20.0
6              3            -1         17.0
7              3            1          25.0
...
Kann das mit einer Abfrage gemacht werden?
Viele Grüße

ruebezaehler
Neuer Benutzer
Beiträge: 8
Registriert: So 13. Mär 2016, 17:32

Re: Werte verschiedener Zeilen addieren

Beitrag von ruebezaehler » Do 23. Mai 2019, 09:08

Ich möchte mich für das unüberlegte Einstellen der Anfrage entschuldigen. Die Abfrage ist mit Boardmitteln von PostgreSQL einfach. Das Thema hat sich erledigt.
Viele Grüße

frastr
Benutzer
Beiträge: 43
Registriert: Di 9. Sep 2014, 12:20
Wohnort: Hoyerswerda, Sachsen

Re: Werte verschiedener Zeilen addieren

Beitrag von frastr » Do 23. Mai 2019, 09:12

Code: Alles auswählen

select  t.*
        , t.value + case when t.typ != 0 then sum(case when t.typ = 0 then t.value else 0 end) over(partition by signal) else 0 end as value_calculated
    from t;

 id | signal | typ | value | value_calculated
----+--------+-----+-------+------------------
  1 |      1 |  -1 |    -2 |                8
  2 |      1 |   0 |    10 |               10
  3 |      1 |   1 |     1 |               11
  4 |      2 |   0 |     5 |                5
  5 |      3 |   0 |    20 |               20
  6 |      3 |  -1 |    -3 |               17
  7 |      3 |   1 |     5 |               25
(7 Zeilen)

ruebezaehler
Neuer Benutzer
Beiträge: 8
Registriert: So 13. Mär 2016, 17:32

Re: Werte verschiedener Zeilen addieren

Beitrag von ruebezaehler » Do 23. Mai 2019, 09:40

@ frastr
Vielen Dank für Deine Antwort. Das Konstrukt mit OVER, PARTITION ist neu für mich.
Meine Lösung mit expliziten SubQueries ist ein paar Zeilen länger.
Viele Grüße nach Hoyerswerda
Viele Grüße

Antworten