「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 分析関数を使用せずに MySQL でカテゴリごとの上位行を効率的に選択する方法は?

分析関数を使用せずに MySQL でカテゴリごとの上位行を効率的に選択する方法は?

2024 年 11 月 8 日に公開
ブラウズ:382

How to Efficiently Select Top Rows per Category in MySQL Without Analytic Functions?

MySQL でのカテゴリごとの上位行の選択

テーブル内の各カテゴリから限られた数の行を取得するには、分析関数を利用できます。 。ただし、MySQL はこれらの関数を直接提供しません。それでも、変数を使用してエミュレートすることは可能です。

分析関数のエミュレーション

次の MySQL クエリは、分析関数の機能をエミュレートして、各カテゴリの上位 3 行を選択します。 :

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 

説明

  • サブクエリは TBL_ARTIKUJT テーブルからすべての行を選択し、2 つのセッション変数 @rownum と @category を初期化します。現在のランキングとカテゴリを追跡します。各行に割り当てられた
  • ランクは、そのカテゴリ内での位置を示します。新しいカテゴリが見つかると、ランクは 1 にリセットされます。
  • var_category は、各行のカテゴリを保存するために使用されます。
  • 外側の SELECT ステートメントはサブクエリをフィルタリングし、ランクのある行のみを選択します。 3 以下。

このメソッドを使用すると、分析関数に依存せずに必要な機能を実装できます。 MySQL.

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3