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

SQLを使用して例外のあるORDERBY句を作成する方法

    SQLでは、ORDER BY 句は通常、クエリの結果を並べ替えるために使用されます。 1つ以上の列を選択して結果を並べ替えることができ、ほとんどの場合、必要なのはそれだけです。

    しかし、例外を設ける必要がある場合はどうなりますか?

    結果を1行を除いてアルファベット順に並べたい場合はどうなりますか?または複数の行?

    または、NULL以外の結果を並べ替えるときに、NULL値を最後に配置したい場合もあります。

    いずれにせよ、これを可能にする巧妙なトリックがあります。そして良い点は、それがシンプルなことです。

    CASEを追加することで、上記のすべてのシナリオに対応できます。 ORDER BYへの表現 条項。

    例1-「その他」を一番下に移動

    音楽のジャンルを含むテーブルに対して次のクエリを実行するとします。

    SELECT Genre 
    FROM MusicGenres
    ORDER BY Genre ASC;

    結果:

    +---------+
    | Genre   |
    |---------|
    | Blues   |
    | Country |
    | Hip Hop |
    | Jazz    |
    | Metal   |
    | Other   |
    | Pop     |
    | Rap     |
    | Rock    |
    +---------+

    この場合、結果はGenreで並べ替えられます。 列、昇順。

    これは1つを除いて問題ありません。 その他というジャンル 。 その他を移動できたら素晴らしいと思いませんか 一番下まで?

    これは、CASEで実現できます。 表現。したがって、上記のクエリを取得して、そのORDER BYを変更できます。 次のような条項。

    SELECT Genre
    FROM MusicGenres
    ORDER BY 
        CASE Genre
            WHEN 'Other' THEN 1
            ELSE 0
        END
        ASC, Genre ASC;

    結果:

    +---------+
    | Genre   |
    |---------|
    | Blues   |
    | Country |
    | Hip Hop |
    | Jazz    |
    | Metal   |
    | Pop     |
    | Rap     |
    | Rock    |
    | Other   |
    +---------+

    例2–NULLを一番下に移動する

    テーブルに厄介なNULL値が含まれている場合は、昇順で注文するときに、それらが一番​​上に留まることを主張することがわかります。

    もう一度、CASE 救助への表現!

    上記の表にいくつかのNULL値が含まれていると想像してみましょう。クエリを実行すると、次のようになります。

    SELECT Genre
    FROM MusicGenres
    ORDER BY 
        CASE Genre
            WHEN 'Other' THEN 1
            ELSE 0
        END
        ASC, Genre ASC;

    結果:

    +---------+
    | Genre   |
    |---------|
    | NULL    |
    | NULL    |
    | Blues   |
    | Hip Hop |
    | Jazz    |
    | Metal   |
    | Pop     |
    | Rock    |
    | Other   |
    +---------+

    そこで、NULL値を一番下に移動します–その他よりもさらに低くします 。

    次のクエリでそれを行うことができます。

    SELECT Genre
    FROM MusicGenres
    ORDER BY 
        CASE
            WHEN Genre IS NULL THEN 2
            WHEN Genre = 'Other' THEN 1
            ELSE 0
        END
        ASC, Genre ASC;

    結果:

    +---------+
    | Genre   |
    |---------|
    | Blues   |
    | Hip Hop |
    | Jazz    |
    | Metal   |
    | Pop     |
    | Rock    |
    | Other   |
    | NULL    |
    | NULL    |
    +---------+

    この例では、別のCASEを使用しました フォーマット。この例では、検索されたCASEを使用しました 表現単純なCASEを使用した前の例とは対照的に 表現

    検索されたCASE expressionは、ブール式のセットを評価して結果を決定します。

    シンプルなCASE 一方、式は、式を一連の単純な式と比較して結果を決定します。

    シンプルなCASE 式には、CASEの横に入力式があります 一方、検索されたCASE 表現はしません。

    例3–特定の行を一番上に修正

    ここで、より広い結果の順序のどこに収まるかに関係なく、常に結果の一番上にある1つ以上の行が必要だと想像してください。

    例:

    SELECT * FROM vAlbums
    ORDER BY ArtistName ASC, AlbumName ASC;

    結果:

    +------------------------+--------------------------+---------+
    | ArtistName             | AlbumName                | Genre   |
    |------------------------+--------------------------+---------|
    | AC/DC                  | Powerage                 | Rock    |
    | Allan Holdsworth       | All Night Wrong          | Jazz    |
    | Allan Holdsworth       | The Sixteen Men of Tain  | Jazz    |
    | Buddy Rich             | Big Swing Face           | Jazz    |
    | Devin Townsend         | Casualties of Cool       | Rock    |
    | Devin Townsend         | Epicloud                 | Rock    |
    | Devin Townsend         | Ziltoid the Omniscient   | Rock    |
    | Iron Maiden            | Killers                  | Rock    |
    | Iron Maiden            | No Prayer for the Dying  | Rock    |
    | Iron Maiden            | Piece of Mind            | Rock    |
    | Iron Maiden            | Powerslave               | Rock    |
    | Iron Maiden            | Somewhere in Time        | Rock    |
    | Jim Reeves             | Singing Down the Lane    | Country |
    | Michael Learns to Rock | Blue Night               | Pop     |
    | Michael Learns to Rock | Eternity                 | Pop     |
    | Michael Learns to Rock | Scandinavia              | Pop     |
    | The Script             | No Sound Without Silence | Pop     |
    | Tom Jones              | Along Came Jones         | Pop     |
    | Tom Jones              | Long Lost Suitcase       | Pop     |
    | Tom Jones              | Praise and Blame         | Pop     |
    +------------------------+--------------------------+---------+

    これらの結果は、ArtistNameの順に並べられています。 、次にAlbumName

    しかし、レコード会社は、トムジョーンズの特別プロモーションを行いたいと判断しました。 。そして彼らはトムジョーンズを望んでいます 結果の上部に表示されますが、残りのすべての結果は、アーティスト名、アルバム名の順にアルファベット順に並べられます。

    この場合、次のことができます。

    SELECT * FROM vAlbums
    ORDER BY 
        CASE ArtistName
            WHEN 'Tom Jones' THEN 0
            ELSE 1
        END,
        ArtistName ASC, AlbumName ASC;

    結果:

    +------------------------+--------------------------+---------+
    | ArtistName             | AlbumName                | Genre   |
    |------------------------+--------------------------+---------|
    | Tom Jones              | Along Came Jones         | Pop     |
    | Tom Jones              | Long Lost Suitcase       | Pop     |
    | Tom Jones              | Praise and Blame         | Pop     |
    | AC/DC                  | Powerage                 | Rock    |
    | Allan Holdsworth       | All Night Wrong          | Jazz    |
    | Allan Holdsworth       | The Sixteen Men of Tain  | Jazz    |
    | Buddy Rich             | Big Swing Face           | Jazz    |
    | Devin Townsend         | Casualties of Cool       | Rock    |
    | Devin Townsend         | Epicloud                 | Rock    |
    | Devin Townsend         | Ziltoid the Omniscient   | Rock    |
    | Iron Maiden            | Killers                  | Rock    |
    | Iron Maiden            | No Prayer for the Dying  | Rock    |
    | Iron Maiden            | Piece of Mind            | Rock    |
    | Iron Maiden            | Powerslave               | Rock    |
    | Iron Maiden            | Somewhere in Time        | Rock    |
    | Jim Reeves             | Singing Down the Lane    | Country |
    | Michael Learns to Rock | Blue Night               | Pop     |
    | Michael Learns to Rock | Eternity                 | Pop     |
    | Michael Learns to Rock | Scandinavia              | Pop     |
    | The Script             | No Sound Without Silence | Pop     |
    +------------------------+--------------------------+---------+


    1. WordPressでHHVMを使用する

    2. XAMPP for WindowsでMySQLコマンドラインにアクセスするにはどうすればよいですか?

    3. AutoMySQLBackupを使用してMySQLデータベースをバックアップする方法

    4. SQL UPDATE