Hallo,
ich habe folgendes (Test-) Schema (für SQLite):
Nun möchte ich für jeden Ordner eine Übersicht erstellen wo aus den Daten der Wert1 summiert werden soll und über den Wert2 soll ein Durchschnitt berechnet werden.
Der Durchschnitt soll aber nicht einfach mit avg berechnet werden sondern Wert2 soll mit der Zeit gewichtet werden.
ZB:
Datensatz1: Wert2 = 10; Zeit = 5;
Datensatz2: Wert2 = 30; Zeit = 10;
Datensatz3: Wert2 = 0; Zeit = 20;
Die Gesamtzeit ist die Summe aller Zeit wo Wert2 größer ist als 0. => 15
=> Durchschnitt = 10*5/15 + 30*10/15 = 23.33
Dies will ich jetzt in SQL umsetzen und in einer View darstellen.
Dazu habe ich zuerst ein DatenOrdnerMapping erstellt:
Und jetzt die Übersicht:
Soweit funktioniert dies auch aber kann die Übersicht einfacher erstellt werden?
Vorallem habe ich in der realen DB mehrere Durchschnittswerte pro Ordner so zu berechnen.
=> mehrere Subqueries => sehr lange query
godi
ich habe folgendes (Test-) Schema (für SQLite):
SQL:
ROP TABLE IF EXISTS "Datein";
CREATE TABLE "Datein" ("DateiID" INTEGER PRIMARY KEY NOT NULL , "DatenID" INTEGER NOT NULL );
INSERT INTO "Datein" VALUES(1,2);
INSERT INTO "Datein" VALUES(2,3);
INSERT INTO "Datein" VALUES(3,5);
INSERT INTO "Datein" VALUES(4,1);
INSERT INTO "Datein" VALUES(5,4);
INSERT INTO "Datein" VALUES(6,8);
INSERT INTO "Datein" VALUES(7,7);
INSERT INTO "Datein" VALUES(8,6);
DROP TABLE IF EXISTS "Daten";
CREATE TABLE "Daten" ("DatenID" INTEGER PRIMARY KEY NOT NULL , "Wert1" FLOAT, "Wert2" FLOAT, ZeitInSec);
INSERT INTO "Daten" VALUES(1,5,10,10);
INSERT INTO "Daten" VALUES(2,20,30,50);
INSERT INTO "Daten" VALUES(3,5,10,30);
INSERT INTO "Daten" VALUES(4,0,0,10);
INSERT INTO "Daten" VALUES(5,10,10,100);
INSERT INTO "Daten" VALUES(6,20,30,120);
INSERT INTO "Daten" VALUES(7,10,10,80);
INSERT INTO "Daten" VALUES(8,20,30,200);
DROP TABLE IF EXISTS "OrdnerMapping";
CREATE TABLE "OrdnerMapping" ("OrdnerID" NOT NULL , "DateiID" INTEGER NOT NULL );
INSERT INTO "OrdnerMapping" VALUES(1,1);
INSERT INTO "OrdnerMapping" VALUES(1,3);
INSERT INTO "OrdnerMapping" VALUES(1,5);
INSERT INTO "OrdnerMapping" VALUES(1,7);
INSERT INTO "OrdnerMapping" VALUES(2,2);
INSERT INTO "OrdnerMapping" VALUES(2,4);
INSERT INTO "OrdnerMapping" VALUES(2,6);
INSERT INTO "OrdnerMapping" VALUES(2,8);
Nun möchte ich für jeden Ordner eine Übersicht erstellen wo aus den Daten der Wert1 summiert werden soll und über den Wert2 soll ein Durchschnitt berechnet werden.
Der Durchschnitt soll aber nicht einfach mit avg berechnet werden sondern Wert2 soll mit der Zeit gewichtet werden.
ZB:
Datensatz1: Wert2 = 10; Zeit = 5;
Datensatz2: Wert2 = 30; Zeit = 10;
Datensatz3: Wert2 = 0; Zeit = 20;
Die Gesamtzeit ist die Summe aller Zeit wo Wert2 größer ist als 0. => 15
=> Durchschnitt = 10*5/15 + 30*10/15 = 23.33
Dies will ich jetzt in SQL umsetzen und in einer View darstellen.
Dazu habe ich zuerst ein DatenOrdnerMapping erstellt:
SQL:
CREATE VIEW DatenOrdnerMapping as
select om.OrdnerID, DatenID from OrdnerMapping om, Datein d where om.DateiID = d.DateiID
Und jetzt die Übersicht:
SQL:
CREATE VIEW Uebersicht as
select dom.OrdnerID, sum(d.Wert1) summe, av.durchschnitt durchschnitt from DatenOrdnerMapping dom, Daten d,
(Select OrdnerID, sum(d.Wert2 * d.ZeitInSec)/sum(d.ZeitInSec) durchschnitt from DatenOrdnerMapping dom, Daten d where d.Wert2>0 and d.DatenID IN(dom.DatenID) group by OrdnerID) as av
where dom.OrdnerID = av.OrdnerID and d.DatenID IN(dom.DatenID) group by dom.OrdnerID
Soweit funktioniert dies auch aber kann die Übersicht einfacher erstellt werden?
Vorallem habe ich in der realen DB mehrere Durchschnittswerte pro Ordner so zu berechnen.
=> mehrere Subqueries => sehr lange query
godi