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

GROUPBYステートメントの事前注文

    MySQLでは、これを行う最も安全な方法はおそらく変数を含みます:

    select im.*
    from (select im.*,
                 (@rn := if(@p = platform_type_id, @rn + 1,
                            if(@p := platform_type_id, 1, 1)
                           )
                 ) as rn
          from main_itemmaster im cross join
               (select @rn := 0, @p := '') params
          order by platform_type_id, (territory_id = 'US') desc
         ) im
    where rn = 1;
    

    SELECTの列を許可するMySQL(mis)機能の使用は含まれません 集計されておらず、GROUP BYにない集計クエリの 。

    こちら は、動作していることを示すSQLフィドルです。

    編集:

    変数の評価の順序について。 ドキュメント から :

    上記のコードは、技術的には、同じステートメントの変数を読み取ります。 、ただし同じif()のセマンティクス (およびcase 私も時々使用します)式の評価の順序を保証します。



    1. Python:MySQL:タイムアウトの処理

    2. Oracleの関数を自動シーケンスでコンマ区切りの値に分割

    3. MariaDBでのINSERT()関数のしくみ

    4. ApacheSolrのドキュメントのカウントをリクエストする