MySQL:使用查询对最常用的名称进行排序,但特定于每个IP

时间:2016-05-27 01:12:33

标签: mysql sql

我有一个像这样设置的表:

id    |      ip      |   name    
---------------------------------
1     | 54.34.32.222 |   John 
2     | 23.44.64.843 |   Rick 
3     | 54.34.32.222 |   John 
4     | 23.44.64.843 |   John 
5     | 14.432.45.45 |   Lisa 
6     | 54.34.32.222 |   Lisa 
7     | 14.432.45.45 |   Lisa

我想查询和排序最流行的名字。我不希望每个名称包含任何多个IP。

例如,约翰两次出现“54.34.32.222”,所以我只想抓住第一行。但是“54.34.32.222”也出现在Lisa身上,所以我也想抓住那个IP。

结果应如下所示:

id    |      ip      |   name    
---------------------------------
1     | 54.34.32.222 |   John 
2     | 23.44.64.843 |   Rick 
4     | 23.44.64.843 |   John 
5     | 14.432.45.45 |   Lisa 
6     | 54.34.32.222 |   Lisa

Lisa和John将成为最受欢迎的名字,应该出现在排名的顶部,然后是Rick。

我希望我的最终查询能够返回类似的内容:

name     |  count  |
--------------------
Lisa     |    2    |
John     |    2    |
Rick     |    1    |

是否可以在单个查询中执行此操作?甚至两个?非常感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您可以按名称分配不同的ip来计算。如果与计数挂钩,您可以按名称或其他列进行订购。

select name, count(distinct ip) as cnt
from tablename
group by name
order by cnt desc, name