Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Trả về danh sách tất cả người dùng, được ghép nối với người theo dõi phổ biến nhất của họ. Ai đó càng có nhiều người theo dõi, họ càng nổi tiếng

Bạn có thể sử dụng truy vấn sau:

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;  

Đầu ra:

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

Truy vấn sử dụng các biến để có được bản ghi lớn nhất cho mỗi nhóm.

Demo tại đây



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ngoại lệ bị bắt:java.sql.SQLException:Số cột không khớp với số giá trị ở hàng 1

  2. Mysql - các trường truy vấn kết thúc giống như cụm từ tìm kiếm

  3. Tôi muốn một trình kích hoạt để XÓA khỏi 2 bảng trong MySQL

  4. Thoát khỏi các dấu nháy đơn trong PHP / MySQL insert không hoạt động

  5. MySQL Fulltext với thứ tự từ cụ thể