sql >> Database >  >> RDS >> Mysql

Hoe kan ik studenten een rang geven waar ze de hoogste rang delen als hun scores gelijk zijn?

Je hebt twee tellers nodig

  • Absolute teller (altijd 1, 2, 3, 4, 5, enz.).
  • Rangteller - deze telt vanaf 1 maar als de scores hetzelfde zijn, wordt deze niet bijgewerkt. Zodra scores anders zijn, wordt deze bijgewerkt met de absolute counter .

Voorbeeldcode

$counter = 1; // init absolute counter
$rank = 1; // init rank counter

// initial "previous" score:
$prevScore = 0;
while ($go = mysql_fetch_array($avg))
{
    // get "current" score
    $score = $go['AVGFCT_10'];

    if ($prevScore != $score) // if previous & current scores differ
        $rank = $counter;
    // else //same // do nothing

    echo "Rank: {$rank}, Score: {$score}<br>";
    $counter ++; // always increment absolute counter

    //current score becomes previous score for next loop iteration
    $prevScore = $score;
}

Uitgang:

Rank: 1, Score: 97.8
Rank: 2, Score: 96.1
Rank: 2, Score: 96.1
Rank: 4, Score: 90.7



  1. SQL Server-equivalent van Bulk Collect in Oracle

  2. Hoe records van tabel naar een andere in te voegen zonder duplicaat?

  3. Verbinding maken met mysql vanuit C# via SSH

  4. Hoe de AUTO_INCREMENT-kolom opnieuw toe te wijzen voor elke rij in een MySQL-tabel met behulp van PHP