ホームページ >データベース >mysql チュートリアル >複数列クエリ内の単一列を効率的に集計するにはどうすればよいですか?

複数列クエリ内の単一列を効率的に集計するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-20 07:46:10974ブラウズ

How Can I Efficiently Aggregate a Single Column in a Multi-Column Query?

複数列クエリでの 1 つの列の集計

概要

クエリ内の 1 つの列を他の多数の列と集計することは、特に難しい場合があります。すべての SELECT フィールドと ORDER BY フィールドが集約されるか、GROUP BY の一部である必要がある場合。この冗長なクエリ構造は管理が煩雑になる可能性があります。

PostgreSQL 9.1 の簡略化されたクエリ

PostgreSQL 9.1 以降には、より単純なソリューションが存在します。主キーを GROUP BY 条件として使用すると、クエリを合理化できます。

SELECT foo1, foo2, foo3, foo4, foo5, foo6, string_agg(aggregated_field, ', ')
FROM tbl1
GROUP BY 1  -- Group by primary key (foo1)
ORDER BY foo7, foo8;

複数のテーブルを使用したクエリ

さまざまな関係を持つ複数のテーブルを含むクエリの場合、最初にデータを集計する方が効率的です。後でテーブルを結合します:

SELECT t1.foo1, t1.foo2, ...,
     t2.bar1, t2.bar2, ...,
     a.aggregated_col
FROM tbl1 t1
LEFT JOIN tbl2 t2 ON ...
...
LEFT JOIN (
   SELECT some_id, string_agg(agg_col, ', ') AS aggregated_col
   FROM agg_tbl a ON ...
   GROUP BY some_id
   ) a ON a.some_id = ?.some_id
ORDER BY ...

集計と結合を分離することで、クエリの大部分を回避できます。不必要な集約により、複雑さが軽減され、パフォーマンスが向上します。

以上が複数列クエリ内の単一列を効率的に集計するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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