pandas - SQL における df.pivot_table の自動ワイド列生成と同等

okwaves2024-01-25  10

pandas を使用した Python では、df.pivot_table はインデックス、列のリスト、および aggfunc を受け取ります。その情報を入力すると、テーブルが長いものから広いものにピボットされます。重要なのは、列のリストを指定すると、それらの列の組み合わせに基づいて新しい幅の広い列が自動的に作成されることです。ただし、私が見たすべての SQL 例は、(a) 単一の列 (連結でアドレス指定できる) のみを使用し、(b) 新しいワイド列名をすべて、フィールド内の個別の値に基づいて生成するのではなく、明示的に書き出します。列。 SQL でサブクエリを使用して列からワイド リストを作成しようとすると、「Single-row subquery returns more than one row」というエラーが発生します。たとえば、次のクエリの月を mont テーブルへのサブクエリに置き換えたいと思います。しかし、それによってこのエラーがスローされます。これは、エラーをスローするサブクエリの使用に変換してやろうとしていることの例です。

select * 
  from monthly_sales
    //pivot(sum(amount) for month in ('JAN', 'FEB', 'MAR', 'APR'))
      pivot(sum(amount) for month in ((SELECT DISTINCT month FROM MONTHS))
      as p
  order by empid;
+-------+-------+-------+-------+-------+
| EMPID | 'JAN' | 'FEB' | 'MAR' | 'APR' |
|-------+-------+-------+-------+-------|
|     1 | 10400 |  8000 | 11000 | 18000 |
|     2 | 39500 | 90700 | 12000 |  5300 |
+-------+-------+-------+-------+-------+


------------------------

残念ながら、Snowflake の PIVOT は SQL Server の PIVOT に似ているため、その形式のサブクエリはサポートされていないようです。したがって、開発者は手続き型言語拡張機能 (T-SQL) を使用して動的クエリを作成し、ピボットされた列を動的に生成する必要があります。

WHERE 句や ON 句の論理式で使用される IN とは異なり、PIVOT クエリで使用される IN は列を生成するため、結果セットの構造を定義するために事前にハードコーディングする必要がある可能性があります。

としてIDE は特殊な目的の宣言型言語であるため、データ要素のより動的なプロパティを可能にする Python のような汎用の解釈型言語と比較できる言語ではない可能性があります。

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。