ホームページ >データベース >mysql チュートリアル >「crosstab()」関数を使用してPostgreSQLでクロス集計クエリを作成する方法

「crosstab()」関数を使用してPostgreSQLでクロス集計クエリを作成する方法

Barbara Streisand
Barbara Streisandオリジナル
2025-01-25 11:11:09282ブラウズ

PostgreSQL クロス集計クエリ: crosstab() 関数を使用してクロス集計を作成します

PostgreSQL のクロス集計クエリは、データをより読みやすい表形式に変換できます。値はカテゴリごとにグループ化され、行はさまざまな属性値を表します。クロス集計クエリは、tablefunc モジュールの crosstab() 関数を使用して作成できます。

テストケースの改善

次の形式を考えてみましょう:

<code>Section    Status    Count
A          Active    1
A          Inactive  2
B          Active    4
B          Inactive  5
C          Inactive  7</code>

次のテーブルを返すクロス集計クエリを作成したいと考えています:

<code>Section    Active    Inactive
A          1         2
B          4         5
C          NULL         7</code>

安全フォーム

このクロス集計クエリを作成するには、crosstab() の 2 つの引数形式を使用できます。

<code class="language-sql">SELECT *
FROM   crosstab(
   'SELECT section, status, ct
    FROM   tbl
    ORDER  BY 1,2'  -- 也可以只写 "ORDER BY 1"

  , $$VALUES ('Active'::text), ('Inactive')$$
   ) AS ct ("Section" text, "Active" int, "Inactive" int);</code>

このフォームは、たとえ冗長な入力行がある場合でも、各属性が必ずその専用列に割り当てられるため、「安全」です。この例では、セクション C の値が Inactive 列に入力されますが、Active 列は NULL のままです。

冗長入力行の処理

crosstab() の 2 つの形式は、余分な入力行を異なる方法で処理します。単一引数形式では、使用可能な値の列が左から右に埋められ、余分な値は破棄されます。 2 つの引数の形式では、各入力値が独自の専用列に割り当てられ、以前の割り当てはすべてオーバーライドされます。

高度な例

クロス集計クエリは、次のようなさまざまな高度なシナリオで使用できます。

  • 複数列ピボット
  • CASE や GROUP BY などの動的代替手段を使用したパースペクティブ
psql の

crosstabview

PostgreSQL 9.6 では、対話型ターミナル psql に crosstabview メタコマンドが導入されています。クロス集計クエリを実行し、結果を表形式で表示できます。

<code class="language-sql">db=> SELECT section, status, ct FROM tbl \crosstabview</code>

How to Create Crosstab Queries in PostgreSQL Using the `crosstab()` Function?

以上が「crosstab()」関数を使用してPostgreSQLでクロス集計クエリを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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