Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да класирам стойности на масив с дублиращи се стойности и пропускам някои позиции, ако има равенство?

Предполагам, че оценките вече са сортирани от базата данни, в противен случай използвайте sort($grades); .

Код:

$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];
}

Резултат:

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

РЕДАКТИРАНЕ (Отговор на дискусия по-долу)

Очевидно, в случай че равенството се случи при най-нисък резултат,
рангът на всички най-ниски резултати трябва да бъде равен на общия брой точки.

Код:

$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];
}

Резултат:

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. колко безопасни са изготвените изявления за ЗНП

  2. Първият html ред не се показва

  3. MySQL:Как да извлечем произволен ред или няколко произволни реда?

  4. При влизане в SQL израз преди име на колона

  5. MySQL:SUM() с JOIN връща неправилни стойности