2012-04-02 16 views
9

Ho la struttura della tabella visualizzata nella prima tabella.Come ottimizzare questo in MySQL?

E si desidera recuperare sia il conteggio di maschi che di femmine in una singola query in modo che la richiesta venga eseguita solo per una volta sul server.

How to optimize this in MySQL ?

+0

Nota. So come recuperare tutti i dati. Ma voglio farlo usando l'ottimizzazione – Thompson

+1

+1 Grazie per aver mostrato chiaramente l'input e l'output desiderato. – pilcrow

+0

@pilcrow: Grazie. – Thompson

risposta

11

Questo è ciò che devi fare:

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 

Regolare di conseguenza :)

Update, con chiarimenti

Nota che COUNT funzione di aggregazione conta solo non -valori nulli. Pertanto, i valori else nello case devono essere NULL. Il valore When restituisce 1 ma potrebbe essere qualsiasi valore non nullo.

Alcune persone implementano questo utilizzando SUM:

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 

Il risultato sarà assolutamente la stessa.

+0

il suo errore di tornare ** # 1064 - Hai un errore nella! la tua sintassi SQL; controlla il manuale che corrisponde alla tua versione del server MySQL per la sintassi corretta da usare vicino a '1 altro 0 fine) Age_0_19, somma (caso quando età tra 20 e 40 di 1 e' alla riga 2 ** – Thompson

+4

Hai appena scritto ' invece di 'then'? –

+0

Oops! Scusa, ho scritto ** che ** al posto di ** then ** perché stava già dando errore ** # 1064 - Hai un errore nella sintassi SQL, controlla il manuale che corrisponde alla versione del server MySQL per la sintassi corretta da utilizzare vicino a "gruppo per genere" alla riga 4 ** – Thompson

Problemi correlati