1
votes

récupérer l'utilisateur le plus suivi parmi les abonnés des utilisateurs

J'ai donc un tableau des followers qui (évidemment) contient quels utilisateurs suivent qui.

Ce que je voudrais faire, c'est découvrir tout Utilisateur 1 ' s abonnés ( U1F ), découvrez qui ils suivent tous ( U1Ffol ), puis en utilisant U1Ffol , additionnez qui U1F suit le plus collectivement. Cela n'a peut-être pas de sens, mais j'ai une idée assez approximative de la façon de le montrer en SQL (gardez à l'esprit que je suis un peu un noob, alors excusez-moi car il s'agit clairement d'un code invalide et n'est pas ce que je veux utiliser ).

+------+---------+
| User | f_count |
+------+---------+
|    1 |       4 |
|    4 |       1 |
|    5 |       1 |
+------+---------+

Voici la structure du tableau:

+----+----------+-----------+
| id | follower | following |
+----+----------+-----------+
|  1 |        2 |         1 |
|  2 |        5 |         1 |
|  3 |        9 |         1 |
|  4 |        1 |         4 |
|  5 |        1 |         5 |
|  6 |        4 |         1 |
+----+----------+-----------+

Donc, dans ce cas, le résultat attendu serait (curieusement, la personne qu'ils suivent le plus, collectivement, est Utilisateur 1 ):

/* retrieve user 1's followers */
SELECT follower AS U1F FROM followers WHERE following = 1;
/* retrieve who each of those users is following */
SELECT following AS U1Ffol FROM followers WHERE follower IN U1F;
/* find out who they're all following *collectively* */
SELECT 
  following AS User,
  COUNT(*) as f_count 
FROM U1Ffol 
GROUP BY User 
ORDER BY f_count DESC


8 commentaires

Votre dernière requête de sélection donnera avec succès le résultat attendu. Où est donc le problème?


Selon la structure de votre table, votre dernière requête vous donnera le résultat. Les tableaux en violon et en question sont différents. Quel tableau dois-je considérer pour répondre à cette question?


sqlfiddle.com/#!9/6b5eda/20 Fonctionne parfaitement bien pour moi.


Je pense que vous devez alors publier votre résultat attendu. Parce que votre résultat attendu affiché ici vient du violon ci-dessus.


@AnkitBajpai c'est très difficile à expliquer. C'est pourquoi j'ai posté cette simulation requête SQL pour aider les gens à comprendre ce que j'essaie de réaliser.


S'il vous est difficile d'expliquer, comment pouvez-vous attendre de nous que vous obteniez le résultat correct? Veuillez réfléchir et poster simplement le résultat attendu, nous ferons de notre mieux pour vous donner une solution possible.


@AnkitBajpai en regardant le simulacre de SQL que j'ai fourni avec le résultat attendu ...


Ce résultat ne nous aide pas davantage à comprendre l'énoncé du problème. Surtout «ceux qu'ils suivent le plus».


3 Réponses :


1
votes

Est en dessous de ce que vous voulez -

SELECT following AS User,
       COUNT(*) as f_count 
FROM (SELECT following
      FROM followers
      WHERE follower IN (SELECT follower
                         FROM followers
                         WHERE following = 1)) t
GROUP BY following 
ORDER BY f_count DESC;


0 commentaires

0
votes

J'ai corrigé vos requêtes, après FROM, vous devez mettre le nom de votre table contenant les colonnes id | abonnés | etc

Le résultat d'une requête est aussi une table, c'est pourquoi je réutilise ces résultats dans les requêtes suivantes, ses sous-requêtes appelées

  /* retrieve user 1's followers */
    SELECT follower AS U1F FROM NAME_OF_YOUR_TABLE WHERE following = 1;
    /* retrieve who each of those users is following */
    SELECT following AS U1Ffol FROM NAME_OF_YOUR_TABLE WHERE follower IN 
    (SELECT follower AS U1F FROM NAME_OF_YOUR_TABLE WHERE following = 1);
    /* find out who they're all following *collectively* */
    SELECT 
      following AS User,
      COUNT(*) as f_count 
    FROM (SELECT following AS U1Ffol FROM NAME_OF_YOUR_TABLE WHERE follower IN 
    (SELECT follower AS U1F FROM NAME_OF_YOUR_TABLE WHERE following = 1))
    GROUP BY User 
    ORDER BY f_count DESC


1 commentaires

Oh euh, je ne veux pas en fait plusieurs instructions select séparées. C'était juste pour vous donner une idée de ce qui devait être fait. Merci d'avoir fait l'effort! :)



0
votes

Vos exemples de résultats semblent être:

SELECT following AS User,
       COUNT(*) as f_count 
FROM U1Ffol 
WHERE 1 IN (follower, following)
GROUP BY User ;


0 commentaires