If abfrage in der where Klausel

Tinolino

Neuer Benutzer
Beiträge
2
Hallo zusammen,

ich beise mich gerade durch eine Query aber komme einfach nicht zu einer Lösung.
Ziel meines Anliegens soll sein, dass ich mein Anliegen in einer Query abfragen kann und keinen zusätzlichen PHP-Workaround brauche.

Gegeben sei folgende Tabelle (siehe Anhang)

upload_2021-1-22_8-59-14.png

Mit der Abfragen soll die Spalte Wert summiert werden.

SELECT sum(wert) , status FROM tabelle
where
name = 1
and
status = (hier liegt das Problem

wenn Status 4 vorhanden ist und name = 1 dann summiere Status 4
wenn Status 4 nicht vorhanden ist aber status 2 vorhanden ist und name = 1 dann summiere Status 2
wenn Status 2 nicht vorhanden ist aber status 1 vorhanden ist und name = 1 dann summiere Status 1

Die Rangfolge erst Status 4 dann Status 2 dann Status 1 ist immer fest vorgegeben.

)

Wie bekomme ich If oder case in die Query, das die Verschachtelung soweit funktioniert?

Ich hoffe ihr könnt mir helfen und danke Euch schon mal für die Hilfe !!!!

Viele Grüße Tinolino
 
Werbung:
mit Deinen Daten, PostgreSQL, und sollte ich grad einen Knoten im Hirn haben:

Code:
test=*# select * from tinolino;
 id | name | status | wert
----+------+--------+------
  1 |    1 |      1 |    1
  2 |    1 |      1 |    1
  3 |    1 |      2 |    1
  4 |    1 |      2 |    1
  5 |    1 |      2 |    1
  6 |    1 |      4 |    1
  7 |    1 |      4 |    1
  8 |    1 |      4 |    1
  9 |    1 |      4 |    1
(9 rows)

test=*# with tmp as (
  select name
         , array_agg(distinct status) as statuse
  from tinolino
  group by name
)

select name
        , sum(wert) filter (
             where (
                (statuse @> array[4] and status = 4) or
                (not (statuse @> array[4]) and statuse @> array[2]) and status = 2) or
                (not (statuse @> array[2,4] and statuse @> array[1]) and status = 1)
        )
from tmp inner join tinolino using (name) group by name;
 name | sum
------+-----
    1 |   4
(1 row)

test=*#
 
Werbung:
Hallo akretschmer,

recht vielen Dank für super schnelle Antwort, Ich habe noch nie mit Arrays in einer Query gearbeitet. Ich probiere es gleiche mal aus.
Ich hätte jeden Falls einen Knoten im Kopf!

Also noch einmal recht vielen Dank!

Gruß Tinolino
 
Zurück
Oben