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

MySqlクエリ:カテゴリごとにテーブルから上位3行を選択します

    LIMITは、ステートメントが返す結果の数のみを停止します。探しているものは、一般に分析/ウィンドウ/ランキング関数と呼ばれます。これはMySQLではサポートされていませんが、変数を使用してエミュレートできます。

    SELECT x.*
      FROM (SELECT t.*,
                   CASE 
                     WHEN @category != t.category THEN @rownum := 1 
                     ELSE @rownum := @rownum + 1 
                   END AS rank,
                   @category := t.category AS var_category
              FROM TBL_ARTIKUJT t
              JOIN (SELECT @rownum := NULL, @category := '') r
          ORDER BY t.category) x
     WHERE x.rank <= 3
    

    SELECT x.*を変更しない場合 、結果セットにはrankが含まれます およびvar_category 値-そうでない場合は、本当に必要な列を指定する必要があります。



    1. JDBCを使用したSQLServerLocalDBへの接続

    2. データベース内の特定のスキーマのすべてをPostgreSQLのグループロールに付与します

    3. Oracleでテーブルのインデックスを見つける方法

    4. プリペアドステートメントまたはQueryRunner.update()でテーブルまたは列名のパラメーターを指定することはできますか?