2016-05-27 5 views
2
に固有

私はこのような設定テーブルを持っている:MySQLの:クエリでソート最も人気のある名前が、各IP

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」がJohnに対して2回表示されるため、最初の行を取得したいだけです。しかし、 "54.34.32.222"もリサに出てくるので、私もその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 

リサとジョンは、最も人気のある名前だろう、とリックに続くソートのトップ、で表示されます。

私はのように見える何かを返すために、私の最後のクエリをしたいと思います:

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

は、単一のクエリでこれを実行することが可能ですか?それとも2つ?あなたの助けが大いにありがとう!

+0

彼は、同様の質問は[こちら](http://stackoverflow.com/questions/37463021/mysql-select-unique-value-in-column-based-on-another-columns-value/37463142を尋ねました#37463142)。 –

答えて

3

名前ごとに異なるIPの数で注文できます。カウントがある場合は、名前やその他の列で注文することができます。

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

"別個のIP"は、クエリごとに1つのIPしか取得せず、名前ごとに1つのIPを取得しませんか? – steeped

+0

それは別のipを名前で数えます。 –

関連する問題