使用CASE和GROUP BY實現動態替代PIVOT
問題:
下表所示資料以行和列的形式組織。目標是將其轉換為具有動態列數的表,其中每列代表按指定類別分組的值。
id | feh | bar |
---|---|---|
1 | 10 | A |
2 | 20 | A |
3 | 3 | B |
4 | 4 | B |
5 | 5 | C |
6 | 6 | D |
7 | 7 | D |
8 | 8 | D |
期望輸出:
bar | val1 | val2 | val3 |
---|---|---|---|
A | 10 | 20 | |
B | 3 | 4 | |
C | 5 | ||
D | 6 | 7 | 8 |
原始查詢:
以下查詢使用CASE表達式和GROUP BY來實現所需結果:
SELECT bar, MAX(CASE WHEN abc."row" = 1 THEN feh ELSE NULL END) AS "val1", MAX(CASE WHEN abc."row" = 2 THEN feh ELSE NULL END) AS "val2", MAX(CASE WHEN abc."row" = 3 THEN feh ELSE NULL END) AS "val3" FROM ( SELECT bar, feh, row_number() OVER (partition by bar) as row FROM "Foo" ) abc GROUP BY bar
高效率的交叉表替代方案:
為了提高效率和可讀性,可以使用tablefunc模組中的crosstab函數來實現動態解決方案。以下是一個範例:
SELECT * FROM crosstab( 'SELECT bar, 1 AS cat, feh FROM tbl_org ORDER BY bar, feh') AS ct (bar text, val1 int, val2 int, val3 int); -- 更多列?
處理多值:
對於同一類別下有多個值的場景,可以將crosstab函數擴展為以下形式:
SELECT * FROM crosstab( 'SELECT bar, val, feh FROM tbl_org ORDER BY 1, 2') AS ct (bar text, val1 int, val2 int, val3 int); -- 更多列?
內建交叉表函數:
tablefunc模組也為特定列數提供了預先定義的crosstab函數:
SELECT * FROM crosstab3('SELECT row_name, attrib, val FROM tbl ORDER BY 1,2');
這些函數使呼叫更簡單,並預設處理文字資料。
動態回傳型別:
雖然tablefunc簡化了流程,但在處理動態回傳類型方面有其限制。為了解決這個問題,可以考慮其他方法,例如使用PL/pgSQL函數或建立動態SQL語句。
以上是如何在SQL中有效率地執行交叉表查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用MySQL的Alter Table語句修改表,包括添加/刪除列,重命名表/列以及更改列數據類型。

文章討論了為MySQL配置SSL/TLS加密,包括證書生成和驗證。主要問題是使用自簽名證書的安全含義。[角色計數:159]

文章討論了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比較了它們對初學者和高級用戶的功能和適合性。[159個字符]

本文討論了使用Drop Table語句在MySQL中放下表,並強調了預防措施和風險。它強調,沒有備份,該動作是不可逆轉的,詳細介紹了恢復方法和潛在的生產環境危害。

本文討論了在PostgreSQL,MySQL和MongoDB等各個數據庫中的JSON列上創建索引,以增強查詢性能。它解釋了索引特定的JSON路徑的語法和好處,並列出了支持的數據庫系統。

文章討論了使用準備好的語句,輸入驗證和強密碼策略確保針對SQL注入和蠻力攻擊的MySQL。(159個字符)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Dreamweaver Mac版
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具