ホームページ >データベース >mysql チュートリアル >ユーザー応答のために SQL で行を列にピボットする方法

ユーザー応答のために SQL で行を列にピボットする方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-05 17:01:42885ブラウズ

How to Pivot Rows into Columns in SQL for User Responses?

SQL 行を列として転置する

SQL で行を列に転置することは、行指向のデータを含むテーブルを変換できるようにする手法です。列指向のデータを含むテーブルに変換します。この手法は一般にピボットとして知られています。

特定のシナリオでは、次の 2 つのテーブルがあります。

  • responses: 質問に対するユーザーの回答が含まれます。
  • 質問: 実際の質問が含まれています

あなたの目標は、「回答」テーブルを置き換えて、さまざまな質問に対する各ユーザーの回答が行ではなく列として表示されるようにすることです。

ステップバイ-ステップ解決策:

目的の転置を実現するには、結合と条件の組み合わせを使用できます。集計:

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;

説明:

  • クエリはまず、「question_id」列で「responses」テーブルと「questions」テーブルを結合します。
  • 次に、MAX() 関数による条件付き集計を使用して、各ユーザーと質問の組み合わせの最大応答値を取得します。
  • CASE ステートメントは質問 ID をチェックし、ID と一致する場合は応答本文を返します。
  • 最後に、GROUP BY 句でグループ化します。ユーザー ID ごとに結果を表示し、各ユーザーの応答が確実にまとめられるようにします。

例結果:

user_id | Do you like apples? | Do you like oranges? | Do you like carrots?
-------- | ------------------ | ------------------- | -------------------
1       | Yes                 | Yes                  | No
2       | Yes                 | No                   | No

以上がユーザー応答のために SQL で行を列にピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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