sql >> データベース >  >> RDS >> Mysql

重複する値で配列値をランク付けし、同点の場合に一部の位置をスキップするにはどうすればよいですか?

    成績はデータベースによってすでに並べ替えられていると思います。それ以外の場合は、sort($grades);を使用します。 。

    コード:

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

    結果:

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

    編集 (以下のディスカッションへの回答)

    明らかに、同点が最低スコアで発生した場合、
    すべての最低スコアのランクは、スコアの総数と等しくなるはずです。

    コード:

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

    結果:

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


    1. OracleでNVL()関数を使用する方法

    2. 1つのmysqlデータベースコンテナでDockerコンテナの2つのインスタンスを実行することは可能ですか?

    3. Hibernate_sequenceテーブルが生成されます

    4. TSQLで分数をhh:mm形式に変換するにはどうすればよいですか?