2015-05-19 18 views
5

ho una tabella con il seguente contenuto:Gruppo e filtro mysql risultati

 
| Country  | Username  | 
+---------------+----------------+ 
| US   | John   | 
| IT   | Pedro   | 
| US   | Bob   | 
| FR   | Jill   | 
| 192.168.1.2 | Roupraht  | 
| 192.168.1.20 | Antonio  | 
+---------------+----------------+ 

Voglio contare gli utenti di ogni paese, e gli utenti con indirizzo IP invece del paese dovrebbero essere contate come "sconosciuto" ;

sono riuscito a scrivere la seguente query SQL:

select country, count(*) as total from users group by country; 

ed ho ottenuto il seguente risultato:

 
+-----------------+-------+ 
| country   | total | 
+-----------------+-------+ 
| 192.168.1.2  |  1 | 
| 192.168.1.20 |  1 | 
| US    |  2 | 
| IT    |  1 | 
| FR    |  1 | 
+-----------------+-------+ 

come posso contare tutti gli indirizzi IP come un "sconosciuto"?
il mio obiettivo è quello di ottenere tabella come questa:

 
+-----------------+-------+ 
| country   | total | 
+-----------------+-------+ 
| Unknown   |  2 | 
| US    |  2 | 
| IT    |  1 | 
| FR    |  1 | 
+-----------------+-------+ 
+0

è possibile aggiungere un ulteriore colonna con nome iSip come sì/no. Sulla base del suo valore puoi contare i dati sconosciuti. –

risposta

1

è possibile utilizzare mysql Dichiarazione LIKE con if:

select if(country LIKE '%.%.%.%', 'unknown', country), count(*) as total from users group by country; 
+0

Questo non sommerà il conteggio "sconosciuto", ma stamperà una riga "sconosciuta" per indirizzo IP. Dovresti creare alias la prima colonna e raggruppare in base ad essa. –

0

è possibile utilizzare questo

set @unknown = (select country from table where country LIKE '%.%.%.%'); 

per impostare una variabile 'sconosciuto' a tutti gli indirizzi IP