MySQL クエリ: 各カテゴリから上位 2 つの記事を選択する
MySQL では、テーブルから指定された数の行を抽出することがよく行われます。 LIMIT句を使用します。ただし、グループ化に基づいて複数の行を選択する必要がある場合は、別のアプローチが必要になります。この記事では、テーブル内の各カテゴリから 2 つの行を選択する特定のシナリオについて説明します。
当初、ユーザーは行を制限するビューを作成し、その後サブクエリを使用して必要な行を取得することでこれを実現しようとしました。記録。ただし、このアプローチでは、合計で 2 つのレコードしか返されませんでした。
解決策は、一般にウィンドウ関数と呼ばれるものを利用することにあります。 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;
この改訂されたクエリ:
このアプローチは、ウィンドウ関数を効果的にエミュレートして、各カテゴリから目的の行をグループ化し、選択します。元の列のみを取得することが目的の場合は、x.*.
の代わりに特定の列名を指定するように外側のクエリを変更できます。以上がMySQL の各カテゴリから上位 2 つの記事を選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。