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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-31 13:55:08821ブラウズ

How to Efficiently Aggregate a Single Column in PostgreSQL Queries with Multiple Columns?

複数の追加列を使用してクエリ内の 1 つの列を集計する方法

PostgreSQL では、クエリに他の列を含めながら 1 つの列を集計するのは面倒な場合があります。ただし、利用可能な解決策はあります。

主キーに Group By を使用する

PostgreSQL 9.1 以降では、プロセスが簡素化されます。 GROUP BY を使用して集計する場合、テーブルの主キーのみを含める必要があります。したがって、foo1 が tbl1 の主キーの場合、クエリは次のように単純化できます。

SELECT foo1, foo2, foo3, foo4, foo5, foo6, string_agg(aggregated_field, ', ')
FROM   tbl1
GROUP  BY 1
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 ...

これにより、クエリの関連部分のみで集計が行われるようになり、パフォーマンスが向上します。

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

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