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

SQL SELECT phức tạp để tính toán xếp hạng trên một cột duy nhất

Ý tưởng là sử dụng một truy vấn con để tính tổng, sau đó thực hiện phép tính và đặt các giá trị vào một cột được phân tách bằng dấu phẩy duy nhất, mà bạn có thể chuyển đổi thành một mảng trong php:

select v.ip, group_concat(v.visits / iv.maxvisits) as ratings
from visit v join
     (SELECT ip, id, visits, max(visits) as maxvisits
      FROM visit
      GROUP BY ip
     ) iv
     on v.ip = iv.ip
group by v.ip;

CHỈNH SỬA:

Các bảng trong SQL vốn không có thứ tự và việc sắp xếp trong SQL không ổn định (nghĩa là thứ tự ban đầu không được giữ nguyên). Bạn có thể chỉ định một thứ tự trong group_concat() bản tường trình. Ví dụ:phần sau sẽ sắp xếp các kết quả theo id :

select v.ip, group_concat(v.visits / iv.maxvisits order by id) as ratings
from visit v join
     (SELECT ip, id, visits, max(visits) as maxvisits
      FROM visit
      GROUP BY ip
     ) iv
     on v.ip = iv.ip
group by v.ip;

Và điều này sẽ sắp xếp theo xếp hạng cao nhất trước:

select v.ip, group_concat(v.visits / iv.maxvisits order by v.visits desc) as ratings

Bạn có thể làm cho danh sách phức tạp hơn để bao gồm id trong đó cũng như:

select v.ip,
      group_concat(concat(v.id, ':', v.visits / iv.maxvisits)) as ratings



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để nhận cập nhật thông báo trực tiếp từ mysql bằng cách sử dụng websockets?

  2. Nâng cấp từ Django 1.6 (với phía nam) lên 1.8 không sửa đổi 'last_login' trên bảng người dùng

  3. Tránh lỗi cột không rõ ràng khi sử dụng JOIN trong MySQL

  4. # 1062 - Mục nhập trùng lặp cho khóa 'CHÍNH'

  5. NHibernate IPreUpdateEventListener, IPreInsertEventListener không lưu vào DB