MySql の各カテゴリから上位 3 行を選択する
多数のレコードとカテゴリ列を持つテーブルで、次のタスクを取得するタスクが発生します。各カテゴリの上位 2 つの記事のみ。これを実現するために、ユーザーは最初に、取得する行数をカテゴリごとに 2 行に制限するビュー limitrows の作成を試みます。ただし、このアプローチでは不十分であることがわかります。
分析関数を理解する
望ましい結果を得るには、分析/ウィンドウ関数/ランキング関数を使用する必要があります。 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
変数 @rownum と @category は、それぞれ行番号と現在のカテゴリを追跡するために使用されます。これらの変数を使用することにより、カテゴリ内の各行のランクが決定され、上位 3 ランク内の行が選択されます。
結果セットのカスタマイズ
必要な列のみが返される場合は、以下に示すように SELECT ステートメントで必要な列を指定します。
SELECT x.articleid, x.title 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
以上が分析関数を使用せずに MySQL の各カテゴリから上位 3 行を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。