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

SQLでグループ合計で行を並べ替える方法

    問題:

    レコードのグループによって生成された合計で行を並べ替えたい。

    例:

    私たちのデータベースには、training 4列のデータ: id ログイン 、およびスコア

    id ログイン スコア
    1 アンディ 2018 24
    2 ルーシー 2019 25
    3 アンディ 2019 20
    4 ルーシー 2018 16
    5 ゲイリー 2019 18
    6 ゲイリー 2018 19
    7 ゲイリー 2017 22
    8 ルーシー 2017 21
    9 アンディ 2017 26

    各プレーヤーのログイン名と、すべての年のスコアの合計を取得し、プレーヤーの合計スコアに従ってレコードを降順に並べていきましょう。

    解決策:

    演算子ORDERBYを使用して、集計関数SUM()に基づいてレコードを並べ替えます。 、これは、すべての年にわたる各プレーヤーの合計スコアを計算します。

    作成するクエリは次のとおりです。

    SELECT login,
      SUM(score) AS total_score
    FROM training
    GROUP BY login
    ORDER BY SUM(score) DESC;
    

    結果は次のとおりです。

    ログイン total_score
    アンディ 70
    ルーシー 62
    ゲイリー 59

    ディスカッション:

    SUM()などの集計関数によって返される値に従って行を並べ替える場合は、ORDERBYを使用します。 。 ORDER BY演算子の後には、集計関数(この例では、SUM())が続きます。 )。 DESCは、この関数の後に配置され、降順のソート順を指定します。したがって、最も高い集計値が最初に表示され、次に徐々に低い値が表示されます。昇順で並べ替えるには、ASCを指定するか、昇順がデフォルトの並べ替え順序であるため、いずれかのキーワードを省略します。

    上記のクエリでは、各プレーヤーのログインとすべての年のスコアの合計を選択します。この合計スコアは、スコア列を引数としてSUM()を使用して計算されます。この集計値のエイリアスを追加します(SUM(score) AS total_score ); ORDER BY句の集計関数の代わりにこのエイリアスを使用できます(ORDER BY total_score DESC

    ログインが含まれていることに注意してください GROUPBYで。 SELECTに列を含める場合は、GROUPBYの列も使用する必要があります。この例では、この列をSELECTに配置するため、GROUPBY句の後に列loginを使用します。クエリでは、GROUPBYがORDERBYの前に配置されていることに注意してください。


    1. 空のオブジェクトのjson列をクエリする方法は?

    2. メールアドレスを主キーとして使用しますか?

    3. PostgreSQLでのPOSITION()のしくみ

    4. IRIWorkbenchでのデータ分類