Hallo!
Folgende Tabelle ohne Schlüssel:
Zu jeder SektionID kann es mehrere Listen geben (n:m), Mit einer Anzahl an vorhandenen Einträgen und einem Median.
Ich möchte bestimmte SektionIDen erhalten, die verschiedenen Abfragen genügen, Beispielsweise:
Alle SektionIDen-IDs mit:
Wobei wenn kein Eintrag für die Liste vorhanden ist in der Tabelle auch kein Eintrag existiert, Quantity = 0 gibt es also nicht.
Nun muss ich aber noch das Average des Median GENAU DIESER Tupel prüfen.
Solche Abfragen ließen sich per EXISTS und NOT EXISTS umsetzen, was aber grottig langsam ist.
Deutlich schneller war mein Ansatz mit UNION und INTERSECT, allerdings kann ich da den Median nicht mitschleppen..:
(SELECT SektionID FROM xyz WHERE List = 100 AND Quantity >= 5)
INTERSECT
(SELECT SektionID FROM xyz WHERE List = 105 AND Quantity >= 3)
...usw.
Der innere Block liefert genau die SektionIDen-Einträge, die ich benötige, allerdings brauche ich für die treffenden Tupel eben noch den Median Wert und SELECT SektionID,Median FROM ... geht nat. nicht, da der UNION/INTERSECT ja über alle Spalten geht.
Die Abfragekombinationen müssen für statistische Abfragen sehr variabel sein und sind Kombinationen aus mehr oder weniger vielen AND / OR / NOT..
Wie kann ich das umsetzen? Die SektionID hilft nicht, da ja weitere Listen zu einer SektionID gehören können und so den avg(Median) verfälschen würden.
Ein anderer Ansatz war etwa folgender, hat mir aber gar nicht gefallen:
Dies natürlich für jeden 'zusammenhängenden' AND-Block und count(*) = x eben entsprechend der Anzahl verknüpfter Listen.
Wäre toll wenn Ihr ein paar Vorschläge hättet die jedoch durchaus noch mehr oder weniger performant sein müssten
Vielen, vielen Dank im Vorraus!
Grüße,
Mark
Folgende Tabelle ohne Schlüssel:
Code:
SektionID | List | Quantity | Median
Ich möchte bestimmte SektionIDen erhalten, die verschiedenen Abfragen genügen, Beispielsweise:
Alle SektionIDen-IDs mit:
Code:
( Mindestens 5 Einträgen aus List_100 UND Mindestens 3 Einträgen aus List_105 ) ODER ( Mindestens 10 Einträgen aus List_200 UND KEINEM Eintrag aus List_110 )
Nun muss ich aber noch das Average des Median GENAU DIESER Tupel prüfen.
Solche Abfragen ließen sich per EXISTS und NOT EXISTS umsetzen, was aber grottig langsam ist.
Deutlich schneller war mein Ansatz mit UNION und INTERSECT, allerdings kann ich da den Median nicht mitschleppen..:
Code:
SELECT SektionID FROM (
INTERSECT
(SELECT SektionID FROM xyz WHERE List = 105 AND Quantity >= 3)
...usw.
Code:
) GROUP BY SektionID HAVING avg(Median) >= ...
Die Abfragekombinationen müssen für statistische Abfragen sehr variabel sein und sind Kombinationen aus mehr oder weniger vielen AND / OR / NOT..
Wie kann ich das umsetzen? Die SektionID hilft nicht, da ja weitere Listen zu einer SektionID gehören können und so den avg(Median) verfälschen würden.
Ein anderer Ansatz war etwa folgender, hat mir aber gar nicht gefallen:
Code:
SELECT SektionID FROM ( ( SELECT SektionID FROM xyz (WHERE List = 100 AND Quantity >= 5) OR (List = 105 AND Quantity >= 3) GROUP BY SektionID HAVING count(*) = 2 AND avg(Median) >= ... ) )
Wäre toll wenn Ihr ein paar Vorschläge hättet die jedoch durchaus noch mehr oder weniger performant sein müssten
Vielen, vielen Dank im Vorraus!
Grüße,
Mark
Comment