SQLAlchemy: mehrere Zähler in einer Abfrage

8

Ich habe Schwierigkeiten, meine SQLAlchemy-Abfragen zu optimieren. Mein SQL-Wissen ist sehr einfach und ich kann einfach nicht die Sachen bekommen, die ich von den SQLAlchemy-Dokumenten benötige.

Nehmen Sie die folgende sehr grundlegende Eins-zu-Viele-Beziehung an:

%Vor%

Wie könnte ich:

  • Tupel von (Parent, count_of_naughty_children, count_of_all_children) für jedes Elternteil abfragen?

Nach einer anständigen Zeit beim Googlen habe ich herausgefunden, wie man diese Werte separat abfragt:

%Vor%

Ich habe versucht, sie auf verschiedene Arten zu kombinieren, aber ich habe es nicht geschafft, das zu bekommen, was ich will.

  • Frage alle Eltern ab, die mehr als 80% unartige Kinder haben? Edit: ungezogen könnte NULL sein.

Ich nehme an, dass diese Abfrage auf der vorherigen basieren wird, die nach dem Verhältnis Naughty / All gefiltert wird.

Jede Hilfe ist willkommen.

BEARBEITEN: Dank Antti Haapalas Hilfe fand ich eine Lösung für die zweite Frage:

%Vor%

Es findet einen Durchschnittswert für die Variable naughty von Kindern, behandelt False und NULLs als 0 und True als 1. Getestet mit dem MySQL-Backend, sollte aber auch für andere funktionieren.

    
meandrobo 23.07.2014, 16:57
quelle

2 Antworten

8

Die Funktion count() sql aggregate ist ziemlich einfach; Es gibt Ihnen die Gesamtzahl der Nicht-Null-Werte in jeder Gruppe. In diesem Sinne können wir Ihre Anfrage so anpassen, dass Sie das richtige Ergebnis erhalten.

%Vor%

Was die folgende sql erzeugt:

%Vor%     
SingleNegationElimination 23.07.2014, 17:20
quelle
4

Wenn Ihre Abfrage nur die Eltern mit & gt; 80% Kinder ungezogen, können Sie auf den meisten Datenbanken die naughty auf Integer werfen, dann nehmen Sie den Durchschnitt davon; dann having dieser Durchschnitt größer als 0.8 .

Sie erhalten also etwas wie

%Vor%     
Antti Haapala 23.07.2014 17:04
quelle

Tags und Links