2017-04-07 4 views
1

人に最も人気のあるフォロワーを見つけましょう。誰かが持っている信者が多いほど、彼らはより多くの「 」が好きです。最も人気のあるフォロワーとペアになっているすべてのユーザーのリストを返します。誰かが持っている信者が多いほど、彼らの人気度は高くなります

人の最も人気のあるフォロワーを選択するにはSQLクエリが必要です。

マイ表 - PERSON_ID 1(3 PERSON_ID、2 PERSON_ID)合計2フォロワーを有する(フォロワー)

id | person_id | follower_person_id 
1 1   2 
2 1   3 
3 2   1 
4 2   4 
5 3   1 
6 3   2 
7 3   4 
8 4   3 

は、 2は合計2人のフォロワー(PERSON_ID 1は、4 PERSON_ID)を有するPERSON_ID、3 PERSON_ID 合計3人(person_id 1、person_id 2、person_id 4)とperson_id 4人がフォローされています。(person_id 3)

したがって、3 PERSON_ID 1をPERSON_ID、PERSON_ID 1のための最も人気のフォロワーであるPERSON_ID 2のための最も人気のフォロワーである、(2 PERSON_IDまたは )1 PERSON_ID PERSON_ID 3のための最も人気のフォロワーであり、3 をPERSON_IDための最も人気のありますここでは4

をPERSON_ID

SELECT t1.person_id, t1.follower_person_id, t2.cnt 
FROM followers AS t1 
JOIN (
    SELECT person_id, COUNT(*) AS cnt 
    FROM followers 
    GROUP BY person_id 
) AS t2 ON t1.follower_person_id = t2.person_id 
WHERE t1.person_id = 1 
ORDER BY t2.cnt DESC LIMIT 1 

クエリ出力上記のクエリが...

です

Here is explanation of above query

このクエリは、特定の人のために人気のある人を見つけるために働くが、 だけ私はすべての人のための彼らの最も「人気の」フォロワーとペア見つけたいです。

SO出力は、今、私は別のperson table

id | name 
1 John   
2 Ali   
3 Rohn   
4 Veronica 

は、今私は人の名前にこのIDを変換したいき

person_id, follower_person_id, cnt 
----------------------------------- 
1,   3,     3 
2,   1,     2 
3,   1,     2 
4,   3,     3 

ようにする必要があります。

最終出力は、私は、このデータを取得するために、SQLクエリを必要とする

person_name, follower_person_name, cnt 
-------------------------------------- 
John,  Rohn,     3 
Ali,   John,     2 
Rohn,  John,     2 
Veronica, Rohn,     3 

好きshoud。

+0

を作成しようと、それを呼び出すことができますOU "彼らの最も "人気の" すべての人のためのフォロワーを。" を定義...明確に説明してください。.. – scaisEdge

+0

PERSON_ID 1は、合計2フォロワー(3 PERSON_ID、2 PERSON_ID)している、1をPERSON_ID(2合計2人のフォロワーを持つPERSON_ID 4をPERSON_ID )、person_id 3には3人のフォロワー(person_id 1、person_id 2、person_id 4)があり、person_id 4には1人のフォロワー(person_id 3)があります。 したがって、3 PERSON_ID PERSON_ID 1のための最も人気のフォロワーであり、1はPERSON_ID 2のための最も人気のフォロワーであるPERSON_ID、1 PERSON_ID(又は2 PERSON_ID)PERSON_ID 3のための最も人気のフォロワーであり、3 PERSON_IDするPERSON_ID 4 @scaisEdgeための最も人気のあります –

答えて

1

は、次のクエリを使用することができます。

SELECT person_name, follower_name, cnt 
FROM (
    SELECT person_name, follower_name, cnt, 
      @rn := IF(@pname = person_name, @rn + 1, 
        IF(@pname := person_name, 1, 1)) AS rn 
    FROM (
     SELECT t3.name AS person_name, t4.name AS follower_name, t2.cnt 
     FROM followers AS t1 
     JOIN (
     SELECT person_id, COUNT(*) AS cnt 
     FROM followers 
     GROUP BY person_id 
    ) AS t2 ON t1.follower_person_id = t2.person_id 
     JOIN person AS t3 ON t1.person_id = t3.id 
     JOIN person AS t4 ON t1.follower_person_id = t4.id 
    ) AS x 
    CROSS JOIN (SELECT @rn := 0, @pname := '') AS vars 
    ORDER BY person_name, cnt DESC) AS v 
wHERE v.rn = 1; 

出力:

person_name follower_name cnt 
-------------------------------- 
John  Rohn   3 
Veronica Rohn   3 
Ali   John   2 
Rohn  Ali    2 

クエリは最大-グループごとのレコードを取得するために、変数を使用しています。

Demo here

+0

ありがとうございます。できます。 @Giorgos Betsos –

0
SELECT p1.name, p2.name, t2.cnt 
FROM followers AS t1 
JOIN (
    SELECT person_id, COUNT(*) AS cnt 
    FROM followers 
    GROUP BY person_id 
) AS t2 ON t1.follower_person_id = t2.person_id 
join person p1 on t1.person_id=person.id 
join person p2 on t1.follower_person_id=person.id 
ORDER BY t2.cnt DESC LIMIT 1 
+0

いいえ、これは動作していません。エラーがあります。私が 't1.person_id = p1.id t1.follower_person_id = p2.id'に参加する人p2に' join person p1を書くとします。それは動作します。しかし、その結果は期待できません –

0

たぶん、あなたが選択した言語には、いくつかのコード 2番目の列の名前を下げてもらうために、最高の信者をソートするために、次のクエリを試してみてくださいとそれを組み合わせることができます。

select f.person_id, p.name 
from followers f 
inner join person p on p.id=f.person_id 
group by f.person_id order by count(f.follower_person_id) desc 
各出力idに

FIXED_ID_FROM_PREVIOUS_QUERYあなたは彼が従っている者を得るとyを行う方法列1および3

select p.name, count(f.follower_person_id) 
from followers f 
inner join person p on p.id=f.person_id 
inner join person pf on pf.id=f.follower_person_id where 
f.person_id in (select person_id from followers where follower_person_id=FIXED_ID_FROM_PREVIOUS_QUERY) 
group by f.person_id order by count(f.follower_person_id) desc 
関連する問題