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

カテゴリごとにN個のレコードを選択し、Xで並べ替えます

    MySQLはしません 分析関数(ROW_NUMBER、RANK、DENSE_RANK、NTILE ...)をサポートしますが、変数を使用して機能をエミュレートできます。

    Nが必要な場合 最新のブログ投稿:

    SELECT x.id,
           x.title,
           x.description,
           x.cat,
           x.filename,
           x.date
      FROM (SELECT bp.id,
                   bp.title,
                   bp.description,
                   bp.cat,
                   bp.filename,
                   bp.date,
                   CASE 
                     WHEN bp.cat = @category THEN @rownum := @rownum + 1
                     ELSE @rownum := 1
                   END AS rank,
                   @category := bp.cat
              FROM BLOG_POSTS bp
              JOIN (SELECT @rownum := 0, @category := NULL) r
          ORDER BY bp.cat, bp.date DESC) x
     WHERE x.rank <= N
    

    ランク1を最初のブログ投稿にする場合は、ORDERBYを次のように変更します。

    ORDER BY bp.cat, bp.date
    


    1. データベース内のクラスの拡張

    2. 新しいRailsプロジェクトでSQLiteからPostgreSQLに変更する

    3. Djangoの実行中の移行中にエラーが発生しました:django.db.utils.OperationalError:(2013、'クエリ中にMySQLサーバーへの接続が失われました')

    4. MySQL:入れ子集合は遅いですか?