Verrechnen von verschiedenen Spalten

Hallo an alle!

Mein Problem ist Folgendes: Ich möchte in einer Tabelle eine Spalte erstellen, deren Werte ich mit anderen Spalten der gleichen Tabelle berechne. Bei den ursprünglichen Spalten handelt sich um Geschwindigkeitswerte zu aufeinanderfolgenden Zeitpunkten. Die neue Spalte soll die Geschwindigkeitsabweichung berechnen ((Geschwindigkeit+Geschwindigkeit2+Geschwindigkeit3)/3). Mein Script dafür sollte in etwa so aussehen:

CREATE TABLE Neue_Tabelle AS
SELECT
(Alte_Tabelle_a.*,
velodiff integer GENERATED ALWAYS AS ((Alte_Tabelle_a.velo_a+ Alte_Tabelle_b.velo_b+Alte_Tabelle_c.velo_c)/3)
STORED)
FROM
Alte_Tabelle_a, Alte_Tabelle_b, Alte_Tabelle_c;

velo_… ist dabei jeweils die Geschwindigkeit der verschiedenen Tabellen bzw. Zeitpunkte.
Das Script funktioniert aber leider nicht, da man den “GENERATED ALWAYS AS” Befehl nur für das CREATE TABLE benutzen kann. Hat vielleicht jemand noch eine andere Möglichkeit die Spalten zu verrechnen?

Ich freue mich über alle Anregungen!

Viele Grüße
Mimi

Schnellschuß: erstelle die Tabelle und fülle sie dann erst. Oder: verwende einen (materialized) View.

Ich habe die Tabelle erstellt und versucht sie mit UPDATE zu füllen:

UPDATE Neue_Tabelle
SET velodif = (velo_uni+velo_a+velo_b)/3
WHERE participant_uni=participant_a AND participant_uni=participant_b;


Leider kommt hier auch nicht das Ergebnis raus, das ich gerne hätte. In der Spalte velodif habe ich gar keine Werte und die anderen Geschwindigkeitswerte werden verändert, was ich ja eigentlich nicht will.
Gibt es da noch eine andere Möglichkeit? Oder kann man das anders ausdrücken?

Mit UPDATE füllt man keine Tabelle, sondern verändert bestehende Werte. Dein Update sollte nur velodif anpassen, solange die Where-Condition erfüllt ist. Ich versuche jetzt nicht das Bild da zu interpretieren.

Warum machst du da keinen View draus?

Die Joins könntest Du auch ordentlich machen, mit “join” statt “where” Clause und dann vor allem:
Zumindest probehalber mal “left join” nehmen, um zu prüfen, dass die richtigen Spalten verwendet werden bzw. überhaupt matchende Join Werte vorhanden sind.
Derzeit würde nur ein update ausgeführt, wenn tatsächlich alle 3 Spalten passen, sonst nicht. Vielleicht gibt es dafür keine Kandidaten.
Würden nur 2 passen, ist natürlich die statische Berechnung “/3” falsch.

Die Frage von Gisman scheint mir auch sehr berechtigt.

Schau mal hier, Stichwort generated columns

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.