SQL 行を列として転置する: ピボットされたソリューション
SQL では、行を列として転置することは、表形式データを再形成するための便利な手法です。データ ポイントを表す行と変数を表す列を含むテーブルがある場合、データの方向を切り替える必要があるシナリオが発生する可能性があります。
そのようなシナリオの 1 つは、質問で説明されているように、応答と質問を含むテーブルが含まれます。 。目標は、回答データを列形式に転置することです。各質問が 1 つの列になり、その質問に対する各ユーザーの回答が対応する行に表示されます。
この転置を実現するには、既知の手法を利用できます。 「ピボットクエリ」として。次の SQL ステートメントは、PostgresSQL を使用したソリューションを示しています。
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
このクエリは、条件付き集計を使用して、質問 ID に基づいて応答値をグループ化し、集計します。 CASE ステートメントは、各質問の回答を抽出し、特定の列に割り当てます。 MAX() 関数は、各質問とユーザーのペアの最新の回答のみが含まれるようにするために使用されます。
このクエリの出力は、目的の転置形式に似ており、各ユーザーの ID が最初のリストに表示されます。列の後に、ユーザーの回答 (回答が存在しない場合は NULL) を含む各質問の列が続きます。
このピボット クエリは、行を列として転置するための標準的なアプローチです。 SQL。任意の数の質問と回答の組み合わせを動的に処理するための効率的かつ柔軟なソリューションを提供します。
以上がピボット クエリを使用して SQL で行を列に転置するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。