sql >> Database >  >> RDS >> Mysql

Hoe rangschik ik matrixwaarden met dubbele waarden en sla ik sommige posities over als er een gelijkspel is?

Ik neem aan dat de cijfers al door de database zijn gesorteerd, gebruik anders sort($grades); .

Code:

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

Resultaat:

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

BEWERKEN (Reactie op onderstaande discussie)

Blijkbaar, in het geval dat het gelijkspel optreedt bij de laagste score,
de rangorde van alle laagste scores moet gelijk zijn aan het totale aantal scores.

Code:

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

Resultaat:

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


  1. Datatype komt niet overeen (code 20) tijdens het invoegen

  2. Queryprestaties verbeteren met veel JOIN's

  3. Installeer de mysql-adapter 'gem install activerecord-mysql-adapter'

  4. 3 manieren om het aantal systeemtabellen in een SQL Server-database te tellen