Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uszeregować wartości tablicy ze zduplikowanymi wartościami i pominąć niektóre pozycje w przypadku remisu?

Zakładam, że oceny są już posortowane według bazy danych, w przeciwnym razie użyj sort($grades); .

Kod:

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

Wynik:

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

EDYTUJ (Odpowiedź na dyskusję poniżej)

Najwyraźniej w przypadku remisu z najniższym wynikiem
ranking wszystkich najniższych wyników powinien być równy całkowitej liczbie wyników.

Kod:

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

Wynik:

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. Jak wybrać rekordy ze zduplikowanym tylko jednym polem i wszystkimi innymi wartościami pól?

  2. Oblicz ŚREDNIĄ z 2 kolumn dla każdego wiersza w SQL

  3. mysql wyszukiwanie słów kluczowych

  4. Co to jest LENGTH() w MySQL?

  5. Jak uzyskać nazwy kolumn w Laravel 4?