首頁 >資料庫 >mysql教程 >如何使用 PostgreSQL 將 SQL 行轉置為列?

如何使用 PostgreSQL 將 SQL 行轉置為列?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-31 19:44:10878瀏覽

How to Transpose SQL Rows into Columns Using PostgreSQL?

將 SQL 行轉換為列:綜合指南

在 SQL 中,資料通常可以用表示單一記錄的行和包含特定屬性的列來建構。然而,在某些情況下,有必要將行轉換為列,此過程稱為轉置。在本文中,我們將探索一種使用 PostgreSQL 將行轉為列的解決方案。

問題

考慮以下場景:您有兩個表,一個包含對問題的回答,另一個包含問題的答案包含實際問題。目標是轉置數據,以便每個使用者都有一行代表他們對所有問題的回答。

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() with CASE: MAX() 函數用於聚合正文列,只考慮每個使用者和問題組合的最大值。 MAX() 中的 CASE 表達式充當條件語句,檢索特定問題的正文值,如果不符合條件,則檢索 NULL。

3. GROUP BY: GROUP BY 子句以 user_id 欄位分組。這可確保輸出中的每一行代表一個唯一的使用者。

結論

提供的 SQL 查詢有效地將行轉置為列,讓您可以輕鬆提取使用者對一組問題的回應。這種技術通常稱為資料透視,通常用於資料分析和報告。透過利用 JOIN、MAX() 和 CASE 結構以及 GROUP BY,您可以在 SQL 中實現強大的資料轉換。

以上是如何使用 PostgreSQL 將 SQL 行轉置為列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn