Aggregate Funktionen auf mehreren Tabellen

Hallo,

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?!

Vielen Dank für die Hilfe

TK

Was genau meinst Du mit “mehrere Tabellen”? Vermutlich nicht die offensichtliche Lösung einfach im “FROM” den Tabellennamen zu ändern?

Ich habe mehre Tabellen mit identischen Layout.

Wenn das Ergebnis in einer Abfrage über die verschiedenen Tabellen erzeugt werden soll, würde ich mein Datenmodell überdenken.

Gruß Uwe

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;

Gruß
TK

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!


Andreas

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? :wink:

Noch nicht, aber ich arbeite dran.

Andreas