Mysql
 sql >> база данни >  >> RDS >> Mysql

Връща списък на всички потребители, съчетани с най-популярния им последовател. Колкото повече последователи има някой, толкова по-популярен е той

Можете да използвате следната заявка:

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

Заявката използва променливи, за да получи най-големия запис за група.

Демо тук



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Превключете от JsonStringType към JsonBinaryType, когато проектът използва както MySQL, така и PostgreSQL

  2. 9 наистина полезни MySQL функции за дата, които са лесни за запомняне

  3. MySQL заявка, използваща оператор "in":защо различни резултати с кавички?

  4. Заявка за търсене първо в ширина в MySQL?

  5. Представяне на IP адрес в базата данни на Maxmind Geolitecity