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

Bagaimana cara memberi peringkat nilai array dengan nilai duplikat dan melewatkan beberapa posisi jika ada seri?

Saya menganggap nilai sudah diurutkan berdasarkan database, jika tidak gunakan sort($grades); .

Kode:

$grades = array(92, 84, 84, 84, 83, 65, 41, 38, 38, 37);
$occurrences = array_count_values($grades);
$grades = array_unique($grades);
foreach($grades as $grade) {
    echo str_repeat($grade .' - '.($i+1).'<br>',$occurrences[$grade]);
    $i += $occurrences[$grade];
}

Hasil:

92 - 1
84 - 2
84 - 2
84 - 2
83 - 5
65 - 6
41 - 7
38 - 8
38 - 8
37 - 10

EDIT (Jawaban diskusi di bawah)

Tampaknya, jika seri terjadi pada skor terendah,
peringkat semua skor terendah harus sama dengan jumlah total skor.

Kode:

$grades = array(92, 84, 84, 84, 83, 65, 41, 38, 37, 37);
$occurrences = array_count_values($grades);
$grades = array_unique($grades);
foreach($grades as $grade) {
    if($grade == end($grades))$i += $occurrences[$grade]-1;
    echo str_repeat($grade .' - '.($i+1).'<br>',$occurrences[$grade]);
    $i += $occurrences[$grade];
}

Hasil:

92 - 1
84 - 2
84 - 2
84 - 2
83 - 5
65 - 6
41 - 7
38 - 8
37 - 10
37 - 10


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pilih jumlah / duplikat

  2. Bagaimana aliran reaktif digunakan di Slick untuk memasukkan data

  3. Mengatasi 61 tabel JOIN limit di MySQL dengan membuat subquery di dalam satu sama lain

  4. Di mana tepatnya lokasi tabel database MySQL di folder XAMPP?

  5. CakePHP 3 - Parse Date dengan LocalStringFormat untuk mengoreksi format SQL dan validasi yang benar