MySQL クエリ: テーブル内の各カテゴリから上位 3 行を選択する
このシナリオでは、多数のレコードを含むテーブルがあります。カテゴリごとに分類されています。目標は、各カテゴリから上位 3 つの記事のみを取得することです。ビューと LIMIT を使用して解決策を試みましたが、レコード数が制限されました。
この課題に対処するには、MySQL にはない分析関数を利用する必要があります。ただし、次の変数を使用しても同様の効果を実現できます。
<code class="sql">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>
このクエリは、変数 @rownum と @category を使用して、カテゴリ内の行ランキングを追跡します。まず、両方の変数を NULL/空の値に設定します。
テーブル内の各行 (「t」というエイリアス) について、現在のカテゴリが前のカテゴリと異なるかどうかを確認します。存在する場合は、@rownum に 1 を割り当てます。それ以外の場合は、@rownum を 1 ずつ増やします。同時に、現在のカテゴリを @category に割り当て、後続の行での比較のコンテキストを維持します。
その結果、カテゴリ内の各行をランク付けする一時テーブルが作成されます。最後の WHERE 句は、この一時テーブルをフィルタリングして、ランク 3 以下の行のみを表示します。
必要な列と一致するように、外側の SELECT 句 (x.*) の列参照を調整することを忘れないでください。取得します。
以上が分析関数を使用せずに、MySQL テーブルの各カテゴリから上位 3 行を選択する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。