sql >> Databasteknik >  >> RDS >> Mysql

Hur rangordnar jag arrayvärden med dubbla värden och hoppar över vissa positioner om det är oavgjort?

Jag antar att betygen redan är sorterade efter databasen, annars använd 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];
}

Resultat:

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

REDIGERA (Svar på diskussion nedan)

Tydligen, om oavgjort inträffar vid den lägsta poängen,
bör rangordningen för alla lägsta poäng vara lika med det totala antalet poäng.

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

Resultat:

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


  1. Hur ändrar jag datatyp för ett importerat kalkylblad i mysql?

  2. varför sql med 'exists' körs långsammare än 'in' med MySQL

  3. Maximera effektiviteten av databasfrågor för MySQL - del två

  4. MySQL-uppdatering med PDO och förberedd uttalande fungerar inte