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

Kompleks SQL SELECT untuk menghitung peringkat pada satu kolom

Idenya adalah menggunakan subquery untuk menghitung jumlah, kemudian melakukan perhitungan dan memasukkan nilainya ke dalam satu kolom yang dipisahkan koma, yang dapat Anda ubah menjadi array di 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;

EDIT:

Tabel dalam SQL secara inheren tidak berurutan dan pengurutan dalam SQL tidak stabil (artinya urutan aslinya tidak dipertahankan). Anda dapat menentukan pemesanan di group_concat() penyataan. Misalnya, berikut ini akan mengurutkan hasil dengan 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;

Dan ini akan diurutkan berdasarkan peringkat tertinggi terlebih dahulu:

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

Anda dapat membuat daftar lebih kompleks untuk menyertakan id di dalamnya juga:

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. C# MySQL Error Jumlah kolom tidak cocok dengan jumlah nilai pada baris 1

  2. MySQL:pilih email dari satu tabel saja jika tidak di tabel lain?

  3. Dua kolom sebagai kunci utama di mysql?

  4. $hasil =mysql_query()

  5. Heroku - Tidak dapat terhubung ke server MySQL lokal