Hallo zusammen
ich habe eine Aufgabe, eine historisch gewaschsene, ellenlange (40K Zeichen) Abfrage zu überarbeiten und zu verschlanken. Darunter ist eine einzige Zahl (fact), der Rest sind Dimmensionen. Wenn ich die neue (schlanke) und die alte Variante laufen lasse, dann bekomme ich geringfügig andere Summe für das fact-Feld. Um leichter vergleichen zu können, habe ich den where Teil exact gleich bei den beiden belassen. Was sich aber unterscheidet ist der select und der group by. Bei der neuen Lösung fehlt group by komplett.
Bevor ich mich ins Nirvana begebe und Zeile für Zeile abgleiche, rein theoretisch die Frage: Wie kann sich das Ergebnis einer Afrage unterscheiden, wenn der Filter, also where Teil, gleich sind? N.B. im group by sind gefühlte 10K "case when" statements, die oft dieselbe Felder verwenden und ähnliche Logiken erstellen. Kann es sein, dass dadruch es zu einer Doppelzählung nach alt kommt?
Hier ein Beispiel nach neu:
Beispiel nach alt:
Die Schleifen verwenden die Zahl nie und berechnen die Zahl nicht, sondern das ist ein Wert, der direkt aus der DB kommt.
ich habe eine Aufgabe, eine historisch gewaschsene, ellenlange (40K Zeichen) Abfrage zu überarbeiten und zu verschlanken. Darunter ist eine einzige Zahl (fact), der Rest sind Dimmensionen. Wenn ich die neue (schlanke) und die alte Variante laufen lasse, dann bekomme ich geringfügig andere Summe für das fact-Feld. Um leichter vergleichen zu können, habe ich den where Teil exact gleich bei den beiden belassen. Was sich aber unterscheidet ist der select und der group by. Bei der neuen Lösung fehlt group by komplett.
Bevor ich mich ins Nirvana begebe und Zeile für Zeile abgleiche, rein theoretisch die Frage: Wie kann sich das Ergebnis einer Afrage unterscheiden, wenn der Filter, also where Teil, gleich sind? N.B. im group by sind gefühlte 10K "case when" statements, die oft dieselbe Felder verwenden und ähnliche Logiken erstellen. Kann es sein, dass dadruch es zu einer Doppelzählung nach alt kommt?
Hier ein Beispiel nach neu:
Code:
select Kategorie, Zahl from A where GleicheBedingung
Code:
select max(Kategorie), sum(Zahl) from A where GleicheBedingung group by case when1, bis ca case when100000
Comment