2015-05-19 9 views
5

Mam tabelę o następującej treści:Group oraz filtr mysql wyniki

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

Chcę policzyć użytkowników w każdym kraju, a użytkownicy z adresu IP zamiast kraju powinny być liczone jak „nieznany” ;

udało mi się napisać następujące zapytanie SQL:

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

i mam następujący wynik:

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

jak mogę liczyć wszystkie adresy IP jako "nieznany"?
moim celem jest dostać stolik tak:

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

można dodać jeszcze jedną kolumnę o nazwie isIP jak tak/nie. Na podstawie jego wartości możesz liczyć nieznane dane. –

Odpowiedz

1

można użyć mysql Instrukcja LIKE z instrukcją if:

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

Nie spowoduje to zsumowania liczby "nieznanych", zamiast tego wydrukuje jeden "nieznany" wiersz na adres ip. Powinieneś aliasować pierwszą kolumnę i grupę przez nią. –

0

można użyć tego

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

ustawić zmienną „nieznane” do wszystkich adresów IP