2012-04-02 12 views
9

Ich habe Tabellenstruktur wie in der ersten Tabelle angezeigt.Wie kann dies in MySQL optimiert werden?

Und möchten sowohl männlich als auch weiblich Counts in einer einzigen Abfrage abrufen, so dass die Anfrage nur einmal auf den Server gehen wird.

How to optimize this in MySQL ?

+0

Bitte beachten Sie, dass ich weiß, wie Sie alle Daten abrufen können. Aber ich möchte dies tun, indem Sie die Optimierung verwenden – Thompson

+1

+1 Vielen Dank für die klare Anzeige der Eingabe und der gewünschten Ausgabe. – pilcrow

+0

@pilcrow: Danke. – Thompson

Antwort

11

Dies ist, was Sie tun müssen:

select gender, 
     count(case when age between 0 and 20 then 1 else null end) Age_0_20, 
     count(case when age between 21 and 40 then 1 else null end) Age_21_40 
from yourtable 
group by gender 

entsprechend anpassen :)

Update mit Präzisierungen

Beachten Sie, dass COUNT Aggregatfunktion zählt nur nicht -null Werte. Daher müssen die else Werte in caseNULL sein. Der When Wert gibt 1 zurück, aber es könnte einfach ein beliebiger Wert ungleich Null sein.

dies Einige Leute SUM unter Verwendung implementieren:

select gender, 
     sum(case when age between 0 and 20 then 1 else 0 end) Age_0_20, 
     sum(case when age between 21 and 40 then 1 else 0 end) Age_21_40 
from yourtable 
group by gender 

Das Ergebnis absolut die gleiche sein wird.

+0

Seine Rückkehr Fehler ** # 1064 - Sie haben einen Fehler in! Ihre SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version entspricht, um die richtige Syntax für 'nahe 1' zu verwenden. Age_0_19, sum (Fall bei einem Alter zwischen 20 und 40 als 1 e 'in Zeile 2 ** – Thompson

+4

Haben Sie gerade 'geschrieben als "anstatt" dann "? –

+0

Hoppla! Entschuldigung. Ich schrieb ** als ** anstelle von ** dann **, weil es bereits Fehler gab ** # 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; überprüfen Sie die Handbuch, das entspricht Ihrer MySQL-Server-Version für die richtige Syntax zu verwenden in der Nähe "Gruppe nach Geschlecht" in Zeile 4 ** – Thompson

Verwandte Themen