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

SQLで行に番号を付ける方法

    問題:

    結果テーブルの各行に個別の番号を付けたいと思います。

    例:

    私たちのデータベースには、furniture 次の列にデータがあります:code (主キー)とname

    code 名前
    101 ベッド
    202 ソファ
    333 椅子
    123 本棚
    235 テーブル
    766 デスク

    furniture テーブルには、番号を付けたい家具の名前が格納されています。

    解決策:

    SELECT ROW_NUMBER() OVER() AS num_row,
      code, 
      name
    FROM furniture;
    

    クエリは、各家具の行番号とその名前およびコードを返します。

    num_row 名前 コード
    1 ベッド 101
    2 ソファ 202
    3 椅子 333
    4 本棚 123
    5 テーブル 235
    6 デスク 766

    家具の名前は並べ替えられていないことに注意してください。

    ディスカッション:

    結果セットの各行に番号を付ける場合、SQLはROW_NUMBER()を提供します 働き。この関数はSELECTで使用されます 他の列を持つ句。 ROW_NUMBER()の後 句、OVER()を呼び出します 働き。 OVERに引数を渡した場合 、行の番号付けはどの列に従ってもソートされません。したがって、表示される行の順序は非決定的です。ほとんどの場合、これはレコードがテーブルに挿入された順序です。行の番号付けは1から始まります。この例では、各レコードの番号は1から6です。

    列を使用して行番号を割り当てることもできます。以下の例では、名前でソートされたレコードに番号を付けています。これを行うには、その引数をOVERに渡します。 ORDER BYと一緒に (名前の列に従ってレコードを並べ替えます):

    SELECT ROW_NUMBER() OVER(ORDER BY name) AS num_row,
      name, 
      code
    FROM furniture;
    

    結果セットを見ると、並べ替えられた行とその番号が表示されます。

    row 名前 コード
    1 ベッド 101
    2 本棚 123
    3 椅子 333
    4 デスク 766
    5 ソファ 202
    6 テーブル 235

    ROW_NUMBER()によって提供される番号付け 結果テーブルの行の順序とは無関係です。以下の例では、並べ替えられた列名(OVER(ORDER BY name) )、ただし、別の列(この例では、ORDER BY code

    SELECT ROW_NUMBER() OVER(ORDER BY name) AS num_row,
      name, 
      code
    FROM furniture
    ORDER BY code;
    

    クエリは各行の番号を返しましたが、レコードは列コードに従って並べ替えられているため、これらの番号は昇順ではありません。

    row 名前 コード
    1 ベッド 101
    2 本棚 123
    5 ソファ 202
    6 テーブル 235
    3 椅子 333
    4 デスク 766

    ソートされた行のデフォルトの順序は昇順ですが、DESCを使用して降順でソートすることもできます。 並べ替える列の名前の後のキーワード:

    SELECT ROW_NUMBER() OVER(ORDER BY name ASC) AS num_row,
      name, 
      code
    FROM furniture
    ORDER BY code DESC;
    

    上記のクエリは結果セットを返しました:

    row 名前 コード
    4 デスク 766
    3 椅子 333
    6 テーブル 235
    5 ソファ 202
    2 本棚 123
    1 ベッド 101

    1. MySQLで主キーを削除する

    2. SQL ServerでFILEGROUPPROPERTY()を使用する方法

    3. テーブル式の基礎、パート2 –派生テーブル、論理的な考慮事項

    4. コマンドラインからmysqlデータベースをプレーンテキスト(CSV)バックアップにダンプします