Berechnungen mit Daten aus einer Spalte

Hallo hab mal wieder ein SQL Problem.

Tabelle sieht so aus:
Probe Merkmal Wert
1 A 50
1 B 40
1 C 5
2 A 60
2 B 30
2 C 3
.
.
.

Ich möchte nun in Meiner Abfrage Merkmal D = B/A*(100-C) für die jeweilige Probe errechnen um es dann auch in die Tabelle einfügen zu können.

Wenn die Merkmale in verschiedenen Spalten wären, wäre es ja supereinfach. So wahrscheinlich auch, aber ich krieg es irgendwie nicht hin.

Vielen Dank!

Gehen wir mal schrittweise vor. Dir würde es helfen, wenn die Merkmale in einzelnen Spalten wären? Gibt es pro Probe immer nur einmal jedes Merkmal? Ist die Menge der Merkmale bekannt und begrenzt? Mir scheint hier alles so zu sein.

Okay. Dann schauen wir uns die Daten mal so an, als wären die Merkmale in Spalten.

test=*# select * from merkmale ;
 probe | merkmal | wert
-------+---------+------
     1 | A       |   50
     1 | B       |   40
     1 | C       |    5
     2 | A       |   60
     2 | B       |   30
     2 | C       |    3
(6 rows)

test=*# select probe, sum(case when merkmal='A' then wert else 0 end) as a, sum(case when merkmal='B' then wert else 0 end) as b, sum(case when merkmal='C' then wert else 0 end) as c from merkmale group by probe;
 probe | a  | b  | c
-------+----+----+---
     2 | 60 | 30 | 3
     1 | 50 | 40 | 5
(2 rows)

Schaffst Du es nun, daraus einen VIEW zu basteln? Falls ja, kannst Du Deine Formel auf den VIEW ansetzen. Oder Du baust Deine Formel gleich mit ein:

test=*# select probe, b::float/a*(100-c) from (select probe, sum(case when merkmal='A' then wert else 0 end) as a, sum(case when merkmal='B' then wert else 0 end) as b, sum(case when merkmal='C' then wert else 0 end) as c from merkmale group by probe) foo order by probe;
 probe | ?column?
-------+----------
     1 |       76
     2 |     48.5
(2 rows)

Wo willst Du das aber einfügen? In dieselbe Tabelle? Wäre redundant…

Andreas

Vielen Dank,

hab mir schon gedacht, daß es wahrscheinlich nur mit so einer Pseudo-Kreuztabellenabfrage geht.

Die Tabelle ist ziemlich groß 10 Mio Datensätze und es gibt von jeder Probe manche Merkmale nur einmal, manche sind aber auch 20x und öfter wiederholt. Auch die Anzahl der Merkmale soll unbegrenzt sein (Deswegen habe ich auch nicht für jedes Merkmal eine Spalte angelegt, sondern alle untereinander).

Ich will jetzt eben Mittelwerte der Merkmale und mit bestimmten Formeln auch neue Werte (z.B. Merkmal D) berechnen und diese in einer anderen Tabelle speichern, damit der Zugriff schneller ist.

Aber mit deinen Tipps müsste ich das jetzt schon hinkriegen. Müssten halt noch ein paar “avg” statt der “sum” rein.

Merci