Oracle 行轉列函數 PIVOT

一、概述

Oracle 行轉列函數 PIVOT 是一種非常方便的操作,在處理跨行轉換數據的時候非常有效,能夠將行數據轉為列數據,方便數據的查詢和分析。Oracle 行轉列函數 PIVOT 主要是通過將數據行轉化為數據列,類似於 Excel 的數據透視表功能,通過將聚合函數應用於數據列,實現數據的交叉匯總。

二、PIVOT 的基本語法

SELECT <非聚合列>,       [pivot_clause][
[subquery] { FOR <column> IN <value1>, <value2>, ... <value_n> ] } ]
FROM <table>[PIVOT XML]

其中,pivot_clause 包括 PIVOT 操作的聚合列、行列轉換所需的列名和列轉換對應值的映射。使用 PIVOT XML 可以讓結果以 XML 形式返回。

三、PIVOT 的具體應用

a. 按列分組匯總數據

實際運用中有很多這樣的場景:需求是按照特定的列進行分組,同時還需要對其他列進行計數、求和這樣的聚合計算,所產生的數據結構如下:

| ID | NAME | AGE | GENDER | SCORE || 1  | Tom  | 18  | M      | 90    || 2  | Mary | 19  | F      | 88    || 1  | Tom  | 18  | M      | 95    || 2  | Mary | 19  | F      | 92    || 3  | Jack | 18  | M      | 80    |

可以使用下列 SQL 語句:

SELECT ID, NAME, GENDER,        SUM(SCORE) AS TOTAL_SCORE,        AVG(SCORE) AS AVG_SCORE,        COUNT(*) AS COUNTERFROM SCORES GROUP BY ID, NAME, GENDER;

結果如下表:

| ID | NAME | GENDER | TOTAL_SCORE | AVG_SCORE | COUNTER || 1  | Tom  | M      | 185        | 92.5      | 2       || 2  | Mary | F      | 180        | 90.0      | 2       || 3  | Jack | M      | 80         | 80.0      | 1       |

b. 行列轉換

PIVOT 函數可以將行值轉換為列值,這個功能在處理某些業務場景時很有用。例如,上面的分組表格,我們可能還需要將結果按照性別進一步劃分,得到類似於下面這個表:

| ID | NAME | MALE_SCORE | FEMALE_SCORE || 1  | Tom  | 185        | NULL         || 2  | Mary | NULL         | 180         || 3  | Jack | 80         | NULL         |

可以使用下列 SQL 語句:

SELECT ID, NAME,        MAX(CASE WHEN GENDER = 'M' THEN SCORE ELSE NULL END) AS MALE_SCORE,       MAX(CASE WHEN GENDER = 'F' THEN SCORE ELSE NULL  END) AS FEMALE_SCOREFROM SCORES GROUP BY ID, NAME;

結果如下表:

| ID | NAME | MALE_SCORE | FEMALE_SCORE || 1  | Tom  | 185        | NULL         || 2  | Mary | NULL         | 180         || 3  | Jack | 80         | NULL         |

c. 使用子查詢和PIVOT子句完成複雜轉換

在實際情況下,PIVOT 有時需要使用子查詢來進行更複雜的轉換操作,下面來一起看一個 SQL 語句實戰:

SELECT *FROM (  SELECT ID, NAME, GENDER, SCORE   FROM SCORES ) PIVOT (  AVG(SCORE) for GENDER IN ('M', 'F') )

這個 SQL 查詢操作完成了一個聚合操作,同時將平均值分別按照性別轉換為了不同的列,從而完成了數據的透視表聚合。這個應用主要是針對複雜的、跨度廣的數據結構,能夠方便的將數據轉為透視表形式。

四、PIVOT 的注意事項

a. 請避免混用 SUM 和 COUNT 聚合函數

在使用 PIVOT 的時候,如果混用 SUM 和 COUNT 這樣的聚合函數,在生成的結果中會出現錯誤,因此需要避免使用這樣的混用寫法。

b. 請注意對缺失記錄的處理

在使用 PIVOT 函數的時候,我們還需要注意對於缺失的記錄需要進行處理,否則會導致 PIVOT 函數中出現空值 null,這樣會影響到後續的計算。我們需要在寫 PIVOT 函數之前,針對記錄的缺失做好充分的預處理工作。

c. 請根據實際情況進行動態拼接

在實際情況中,針對不同的數據表格,需要使用不同的動態拼接操作,才能夠最終得到想要的結果,而不是只使用一種固定的規則。因此,我們需要在實際操作中多進行嘗試,積累一定的經驗。

五、總結

PIVOT 是一種強大的 SQL 函數,它能夠將普通的表格數據快速轉換為透視表格形式,方便進行數據的查詢和匯總,尤其是針對複雜的數據結構,PIVOT 會發揮出非常重要的作用。在實際工作中,針對具體的數據結構,我們需要對 PIVOT 函數進行不斷的嘗試和探索,多進行數據的拼接和轉換,才能夠得到更好的結果。

原創文章,作者:YNHHJ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/372250.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YNHHJ的頭像YNHHJ
上一篇 2025-04-24 06:40
下一篇 2025-04-24 06:40

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29
  • 分段函數Python

    本文將從以下幾個方面詳細闡述Python中的分段函數,包括函數基本定義、調用示例、圖像繪製、函數優化和應用實例。 一、函數基本定義 分段函數又稱為條件函數,指一條直線段或曲線段,由…

    編程 2025-04-29
  • Python函數名稱相同參數不同:多態

    Python是一門面向對象的編程語言,它強烈支持多態性 一、什麼是多態多態是面向對象三大特性中的一種,它指的是:相同的函數名稱可以有不同的實現方式。也就是說,不同的對象調用同名方法…

    編程 2025-04-29

發表回復

登錄後才能評論