Zählt SQL-Datensätze basierend auf der gleichgeordneten Eigenschaft

8

Ich habe eine Tabelle mit Personen, die einen Namen, einen Ort (wo sie leben) und eine Eltern-ID haben (Eltern sind auf einem anderen Tisch gespeichert). Also zum Beispiel:

%Vor%

Ich muss zählen, wie viele Menschen in Chicago leben und haben Geschwister (teilen Sie eine Eltern-ID), die in New York leben. Also für das obige Beispiel, die Zählung wäre 3.

%Vor%

Kann jemand mir helfen, die SQL zu schreiben, um diese Zählung abzufragen?

    
dustinbrownman 28.05.2015, 16:34
quelle

4 Antworten

1

Die korrelierte Abfrage ist ein sehr schöner Weg und sehr effizient. Vermeiden Sie die Verwendung von distinct, da es eine teure Operation ist. Group by ist eine nette Alternative gegenüber der Verwendung von distinct. Verstehen Sie die Daten und strukturieren Sie die Abfrage entsprechend. Hier ist eine weitere Option, die Engine optimiert ist ...

%Vor%     
Brian 28.05.2015, 17:35
quelle
3

Sieht so aus, als ob Minhs Antwort gut funktioniert, aber hier ist ein weiteres Beispiel, das ein Self Join verwendet.

%Vor%

Sollte "3" nur für die obige Tabelle ergeben.

EDIT: DISTINCT a.parent_id basierend auf dem Lithis-Vorschlag hinzugefügt.

EDIT2: Wie von Uueerdo bemerkt, würde eine child_id oder eine Art eindeutige ID im Fall von 2 Geschwistern, die in Chicago leben, und 1 Geschwister, die in New York leben, wirklich helfen. Ich habe die ursprüngliche Abfrage bearbeitet, um dies widerzuspiegeln.

Da dies nicht wirklich eine "Antwort" auf Ihre Frage ist, weil es keine solche child_id gibt, würde ich auf Uueerdos Antwort verzichten, tut mir leid!

    
PD1ce 28.05.2015 16:46
quelle
1

Vielleicht versuchen Sie das?

%Vor%     
Minh 28.05.2015 16:41
quelle
1
%Vor%

Wenn Minh als Basis verwendet wird, sollte das ziemlich schnell sein. Da die Unterabfrage nicht mehr "korreliert" ist, sollte nicht die Möglichkeit bestehen, dass sie wiederholt ausgeführt werden muss, einmal für jede Zeile in people .

    
Uueerdo 28.05.2015 17:05
quelle

Tags und Links