我有一个像这样设置的表:
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 |
是否可以在单个查询中执行此操作?甚至两个?非常感谢您的帮助!
答案 0 :(得分:3)
您可以按名称分配不同的ip来计算。如果与计数挂钩,您可以按名称或其他列进行订购。
select name, count(distinct ip) as cnt
from tablename
group by name
order by cnt desc, name