2015-05-19 96 views
5

我有以下内容的表:集团和过滤mysql的结果

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

我要计算每个国家的用户,IP地址,而不是国家的用户应该算如“未知” ;

我已成功地写出下面的SQL查询:

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

,我得到了以下结果:

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

我怎么能算所有的IP地址为“未知”?
我的目标是让表是这样的:

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

你可以用名字ISIP增加一个列是/否。根据它的价值,你可以计算未知数据。 –

回答

1

,你可以使用mysql LI语句与if语句:

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

这不会总结'未知'计数,而是为每个IP地址打印一个'未知'行。你应该通过它别名第一列和组。 –

0

您可以使用此

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

设置一个变量“未知”所有IP地址