ich stoße hier mit meinen SQL Fähigkeiten leider an meine Grenzen und Hoffe das mich jemand hier in die richtige Richtunng schupsen kann…
Ich habe mehre Tabellen mit identischen Layout.
Ich möchte nun die Summe bzw. den Durschnitt von allen Werten aus allen Tabellen erhalten die ein oder mehrere Bedingungen erfüllen:
Für eine Tabelle funktioniert das super mit diesem Query:
SELECT na_id, avg(velocity) as "Durchschnitsgeschwindigkeit", count(velocity) as "Anzahl an Messwerten"
FROM table1
WHERE na_id > 0 and velocity > 0
GROUP BY na_id
ORDER BY na_id ASC;
Es wird also für alle Werte in der Tabelle mit der gleichen na_id der durchschnitt berechnet, genau das was ich möchte.
Wie kann ich den Query gestalten so das ich den Durchschnitt nun nicht nur für eine Tabelle sondern für mehrer Berechnen kann?!
Ich sehe leider nicht den sachdienlichen Kontext dieser Antwort??!
Die Lösung des Problemes habe ich inzwischen gefunden:
SELECT na_id, avg(b.velocity) as "Durchschnitsgeschwindigkeit", count(b.velocity) as "Anzahl an Messwerten"
FROM (SELECT * from table1 union all select * table2 union all select * table) AS b
WHERE na_id > 0 and velocity > 0 GROUP BY na_id ORDER BY na_id ASC;
Offensichtlich hast Du dieselbe Information auf zwei Tabellen verteilt (table1, table2). Sowas deutet meistens daraufhin, dass Dein Datenmodel nicht ganz OK ist. Vermutlich sollte das nur eine Tabelle sein (denn offensichtlich steht in beiden das Gleiche drin).
Mehrere Fragezeichen machen die Frage nicht fragender, sondern fragwürdiger!!!1elf
SCNR
Die Lösung des Problemes habe ich inzwischen gefunden:
War exakt das, was ich beim Lesen des ersten Subjects schon dachte - nur da schlief ich noch. Dennoch: den Hinweis auf das falsche Datenmodell solltest Du durchaus ernst nehmen. Es gibt Lösungen für Dein Problem, die besser als Dein UNION ALL sind. Deine Lösung z.B. skaliert nicht, denn offenbar wird nach einem (uns hier unbekannten Kriteriem) bei z.B. einem neuen Kunden oder so eine neue Tabelle angelegt. Das Problem: Du hast nun auch Deine Abfage zu ändern. FAIL!
Eventuell könnte auch eine Partitionierung der Tabelle eine Lösung sein. Dabei hättest du jeden Datenproduzenten in einer eigenen Tabelle und könntest trotzdem über ein einheitliches Query darauf zugreifen. Die beste Lösung hängt letztlich von mehr ab als einem SQL-Statement. Ansonsten haben Andreas und Castorp ja schon alles gesagt, was ich heut morgen verschlafen hab…
Gruß Uwe
@Andreas: Du kannst beim Schlafen lesen? Kann man auch posten, wenn man schläft?