ホームページ >データベース >mysql チュートリアル >MySQL でグループ化された集計クエリから最初と最後のレコードを取得するにはどうすればよいですか?

MySQL でグループ化された集計クエリから最初と最後のレコードを取得するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-08 01:50:02899ブラウズ

How Can I Fetch the First and Last Records From Grouped Aggregate Queries in MySQL?

MySQL のグループ化された集計クエリから最初と最後のレコードを取得する

データベース操作では、多くの場合、集計値だけでなく、グループ化されたセット内の最初と最後のレコードに関する特定の情報。週や年など、特定の期間ごとにグループ化された一連の値の集計データを取得し、各グループの開始値と終了値を取得したいというシナリオを考えてみましょう。

このため、最初はサブクエリを使用してグループごとに複数の個別のクエリを発行することを考えるかもしれません。ただし、このアプローチは、特に大規模なデータセットの場合、最適とは言えません。 MySQL は、追加のフィルタリングおよびデータ操作関数と組み合わせて集計関数を使用することで、このようなシナリオに対する効率的なソリューションを提供します。

各グループの最初と最後のレコードをフェッチするには、GROUP_CONCAT 関数と SUBSTRING_INDEX 関数を利用できます。 GROUP_CONCAT を使用すると、各グループ内の指定された列の値を連結でき、SUBSTRING_INDEX を使用すると、区切り文字に基づいて最初または最後の部分文字列を抽出できます。

たとえば、毎年の各週の開始値と終了値を取得するには、次のようにします。クエリを次のように変更します。

SELECT MIN(low_price), MAX(high_price),
SUBSTRING_INDEX(GROUP_CONCAT(CAST(open AS CHAR) ORDER BY datetime), ',', 1) AS open,
SUBSTRING_INDEX(GROUP_CONCAT(CAST(close AS CHAR) ORDER BY datetime DESC), ',', 1) AS close
FROM symbols
WHERE date BETWEEN(.. ..)
GROUP BY YEARWEEK(date)

このクエリはデータを年間週ごとにグループ化し、最小 low_price と最大 high_price を計算します。さらに、GROUP_CONCAT を使用して各グループのすべての開いている値を日時で昇順に並べて連結し、SUBSTRING_INDEX を使用して最初のレコードを開始値として抽出します。同様に、すべての終値を降順に連結し、最後のレコードを各グループの終値として抽出します。

これらの関数を利用することで、サブクエリと高価な処理の必要性が回避され、結果的に高速かつ効率的になります。クエリ、特に大規模なデータセットを操作する場合。

以上がMySQL でグループ化された集計クエリから最初と最後のレコードを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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