ホームページ >データベース >mysql チュートリアル >グループ化されたデータから上部Nレコードを効率的に抽出する方法は?

グループ化されたデータから上部Nレコードを効率的に抽出する方法は?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-25 10:05:09266ブラウズ

How to Efficiently Extract the Top N Records from Grouped Data?

グループデータの高効率抽出の上位レコード

人員、グループ化、年齢など、構造化されたデータセットがあると仮定します。

予想される結果:

目標は、各グループで最も古い2人の個人を取得することです。

既存のソリューション:

各グループの単一のトップラインを取得するための前の方法(@bohemianによって提案されたクエリに触発された) ユニオンを使用した拡張ソリューション:

この関数を拡張する1つの方法は、各グループの指定された数量の記録を取得できるように、ユニオンすべてのオペレーターを使用することです。

<code class="language-sql">select * 
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`</code>
行番号の代替案を使用してください:

別の方法は、各レコードの行番号を生成し、次にこの行番号に従ってスクリーニングすることです。

結論:

<code class="language-sql">(
  select *
  from mytable 
  where `group` = 1
  order by age desc
  LIMIT 2
)
UNION ALL
(
  select *
  from mytable 
  where `group` = 2
  order by age desc
  LIMIT 2
)</code>

特定の要件とデータ機能に基づいて、ユニオンとライン番号のテクノロジーの両方が、グループ結果のトップレコードを取得するための効果的なソリューションを提供します。

以上がグループ化されたデータから上部Nレコードを効率的に抽出する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。