sql >> Database teknologi >  >> RDS >> Mysql

Hvordan rangerer jeg matrixværdier med duplikerede værdier og springer nogle positioner over, hvis der er uafgjort?

Jeg antager, at karaktererne allerede er sorteret efter databasen, ellers brug 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]; }

Resultat:

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

REDIGER (Svar på diskussion nedenfor)

Tilsyneladende, hvis uafgjort opstår ved den laveste score,
skal rangeringen af ​​alle de laveste resultater være lig med det samlede antal point.

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

Resultat:

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


  1. MySQL:SELECT og COUNT i samme forespørgsel

  2. SQLcl-formateringsindstillinger (Oracle)

  3. Implementering og administration af MySQL NDB Cluster med ClusterControl

  4. How to_char() virker i PostgreSQL