ホームページ > データベース > mysql チュートリアル > MySQL の各カテゴリから上位 2 つの記事を選択するにはどうすればよいですか?

MySQL の各カテゴリから上位 2 つの記事を選択するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-29 12:02:02
オリジナル
671 人が閲覧しました

How to Select the Top Two Articles from Each Category in MySQL?

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;
ログイン後にコピー

この改訂されたクエリ:

  • 外部クエリテーブル TBL_ARTIKUJT (x.*) から列を選択します。
  • 括弧で囲まれた内部クエリは、各カテゴリ内の各行のランクを計算します。また、現在の行番号とカテゴリを追跡するために使用される 2 つのユーザー定義変数 @rownum と @category も定義します。
  • WHERE 句は、ランク 3 以下の行のみを含むように結果をフィルターします。 .

このアプローチは、ウィンドウ関数を効果的にエミュレートして、各カテゴリから目的の行をグループ化し、選択します。元の列のみを取得することが目的の場合は、x.*.

の代わりに特定の列名を指定するように外側のクエリを変更できます。

以上がMySQL の各カテゴリから上位 2 つの記事を選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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