Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengembalikan daftar semua pengguna, dipasangkan dengan pengikut mereka yang paling populer. Semakin banyak pengikut yang dimiliki seseorang, semakin populer mereka

Anda dapat menggunakan kueri berikut:

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;  

Keluaran:

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

Kueri menggunakan variabel untuk mendapatkan catatan per grup terbesar.

Demo di sini



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 'DbContextOptionsBuilder' tidak mengandung definisi untuk 'UseSqlServer'

  2. Batasan kunci asing gagal

  3. Struktur Folder untuk menyimpan jutaan gambar?

  4. Masalah komunikasi antara dua kontainer buruh pelabuhan

  5. MySQL Query mendapatkan N baris terakhir per Grup