ホームページ > データベース > mysql チュートリアル > 分析関数を使用せずに MySQL でカテゴリごとの上位行を効率的に選択する方法は?

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

DDD
リリース: 2024-10-28 19:05:29
オリジナル
214 人が閲覧しました

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

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

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

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

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

<code class="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</code>
ログイン後にコピー

説明

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

このメソッドを使用すると、MySQL でサポートされていない分析関数に依存せずに、必要な機能を実装できます。

以上が分析関数を使用せずに MySQL でカテゴリごとの上位行を効率的に選択する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート