ホームページ > データベース > mysql チュートリアル > PostgreSQL を使用して SQL 行を列に転置する方法

PostgreSQL を使用して SQL 行を列に転置する方法

Mary-Kate Olsen
リリース: 2024-12-31 19:44:10
オリジナル
854 人が閲覧しました

How to Transpose SQL Rows into Columns Using PostgreSQL?

SQL 行を列に転置: 総合ガイド

SQL では、多くの場合、個々のレコードを表す行と特定の属性を含む列でデータを構造化できます。ただし、行を列に変換する必要がある状況もあります。これは転置として知られるプロセスです。この記事では、PostgreSQL を使用して行を列として転置するためのソリューションを検討します。

問題

次のシナリオを考えてみましょう。1 つは質問への回答が含まれ、もう 1 つは 2 つのテーブルがあるとします。実際の質問が含まれています。目標は、各ユーザーがすべての質問に対する回答を表す行を作成できるようにデータを転置することです。

responses:
user_id | question_id | body
----------------------------
1       | 1           | Yes
2       | 1           | Yes
1       | 2           | Yes
2       | 2           | No
1       | 3           | No
2       | 3           | No

questions:
id | body
-------------------------
1 | Do you like apples?
2 | Do you like oranges?
3 | Do you like carrots?
ログイン後にコピー

望ましい出力は次のようになります。

user_id | Do you like apples? | Do you like oranges? | Do you like carrots?
---------------------------------------------------------------------------
1       | Yes                 | Yes                  | No
2       | Yes                 | No                   | No
ログイン後にコピー

解決策

データを転置するには、JOIN と MAX() を CASE 式と組み合わせて使用​​します。クエリは次のとおりです。

SELECT r.user_id,
       MAX(CASE WHEN r.question_id = 1 THEN r.body ELSE NULL END) AS "Do you like apples?",
       MAX(CASE WHEN r.question_id = 2 THEN r.body ELSE NULL END) AS "Do you like oranges?",
       MAX(CASE WHEN r.question_id = 3 THEN r.body ELSE NULL END) AS "Do you like carrots?"
FROM RESPONSES r
JOIN QUESTIONS q ON q.id = r.question_id
GROUP BY r.user_id
ログイン後にコピー

クエリの詳細

1. JOIN: JOIN 操作は、共通の question_id 列に基づいて、RESPONSES テーブルと QUESTIONS テーブル間の関係を確立します。これにより、応答を対応する質問と組み合わせることができます。

2. MAX() と CASE: MAX() 関数は、各ユーザーと質問の組み合わせの最大値のみを考慮して本文列を集計するために使用されます。 MAX() 内の CASE 式は、特定の質問の本文の値を取得する条件文として機能し、条件が満たされない場合は NULL を取得します。

3. GROUP BY: GROUP BY 句は、結果を user_id 列ごとにグループ化します。これにより、出力の各行が一意のユーザーを表すことが保証されます。

結論

提供された SQL クエリは行を列に効果的に転置するため、一連の質問に対するユーザーの回答を簡単に抽出できます。この手法は一般にデータのピボットと呼ばれ、データ分析やレポート作成でよく使用されます。 JOIN、MAX()、CASE 構造を GROUP BY と併用することで、SQL で強力なデータ変換を実現できます。

以上がPostgreSQL を使用して SQL 行を列に転置する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート