?? LeetCode解題系列 ?? 1179. 重新格式化部門表(Oracle Pivot 行轉(zhuǎn)列函數(shù))

      網(wǎng)友投稿 760 2022-05-30

      ?? 原題 ??

      ?? 解題思路 ??

      Pivot 函數(shù)簡介

      創(chuàng)建測(cè)試表 Department

      插入測(cè)試數(shù)據(jù)

      執(zhí)行 Pivot 行轉(zhuǎn)列函數(shù)

      ?? 原題 ??

      ?? 解題思路 ??

      Pivot 函數(shù)簡介

      創(chuàng)建測(cè)試表 Department

      插入測(cè)試數(shù)據(jù)

      執(zhí)行 Pivot 行轉(zhuǎn)列函數(shù)

      ?? 寫在最后

      ?? 原題 ??

      部門表 Department:

      +---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | revenue | int | | month | varchar | +---------------+---------+ (id, month) 是表的聯(lián)合主鍵。 這個(gè)表格有關(guān)于每個(gè)部門每月收入的信息。 月份(month)可以取下列值 ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]。

      編寫一個(gè) SQL 查詢來重新格式化表,使得新的表中有一個(gè)部門 id 列和一些對(duì)應(yīng) 每個(gè)月 的收入(revenue)列。

      查詢結(jié)果格式如下面的示例所示:

      Department 表: +------+---------+-------+ | id | revenue | month | +------+---------+-------+ | 1 | 8000 | Jan | | 2 | 9000 | Jan | | 3 | 10000 | Feb | | 1 | 7000 | Feb | | 1 | 6000 | Mar | +------+---------+-------+ 查詢得到的結(jié)果表: +------+-------------+-------------+-------------+-----+-------------+ | id | Jan_Revenue | Feb_Revenue | Mar_Revenue | ... | Dec_Revenue | +------+-------------+-------------+-------------+-----+-------------+ | 1 | 8000 | 7000 | 6000 | ... | null | | 2 | 9000 | null | null | ... | null | | 3 | null | 10000 | null | ... | null | +------+-------------+-------------+-------------+-----+-------------+ 注意,結(jié)果表有 13 列 (1個(gè)部門 id 列 + 12個(gè)月份的收入列)。

      ?? 解題思路 ??

      Pivot 函數(shù)簡介

      通過審題可以發(fā)現(xiàn),需要將月份的值 12 個(gè)月轉(zhuǎn)化為 查詢結(jié)果中的 12 個(gè)列。這就是明顯的 行轉(zhuǎn)列 格式化。

      Oracle 11G 中出現(xiàn)的新特性 Pivot 行轉(zhuǎn)列函數(shù)正好可以解此題。

      下面先了解一下 Pivot 函數(shù),主要用于進(jìn)行行轉(zhuǎn)列操作。

      基本語法如下:

      SELECT ... FROM ... PIVOT [XML] ( pivot_clause pivot_for_clause pivot_in_clause ) WHERE ...

      下面我們直接通過 LeetCode 題目實(shí)驗(yàn)來學(xué)習(xí)一下:

      創(chuàng)建測(cè)試表 Department

      CREATE TABLE department ( id NUMBER, revenue NUMBER, month VARCHAR2(10) );

      插入測(cè)試數(shù)據(jù)

      INSERT INTO department VALUES (1, 8000, 'Jan'); INSERT INTO department VALUES (1, 7000, 'Feb'); INSERT INTO department VALUES (1, 6000, 'Mar'); INSERT INTO department VALUES (2, 9000, 'Jan'); INSERT INTO department VALUES (3, 10000, 'Feb'); commit;

      執(zhí)行 Pivot 行轉(zhuǎn)列函數(shù)

      根據(jù)題意:已確定需要查出的列為 ID 和 12個(gè)月份,月份列對(duì)應(yīng)的 REVENUE 的值需要進(jìn)行匯總 (SUM) 顯示。

      SELECT * FROM department PIVOT (SUM(revenue) as "Revenue" for month in ( 'Jan' as "Jan", 'Feb' as "Feb", 'Mar' as "Mar", 'Apr' as "Apr", 'May' as "May", 'Jun' as "Jun", 'Jul' as "Jul", 'Aug' as "Aug", 'Sep' as "Sep", 'Oct' as "Oct", 'Nov' as "Nov", 'Dec' as "Dec" ));

      ??

      ?? LeetCode解題系列 ?? 1179. 重新格式化部門表(Oracle Pivot 行轉(zhuǎn)列函數(shù))

      格式化結(jié)果與原題所需要求保持一致,解題完成。

      ??

      ?? 寫在最后

      關(guān)于 Pivot 行轉(zhuǎn)列函數(shù),還有 UNPivot 函數(shù),感興趣的朋友可以翻閱官方文檔,或者參考以下文章:

      PIVOT and UNPIVOT Operators in Oracle Database 11g Release 1

      本次分享到此結(jié)束啦~

      如果覺得文章對(duì)你有幫助,

      、、關(guān)注、評(píng)論

      ,一鍵四連支持,你的支持就是我創(chuàng)作最大的動(dòng)力。

      Oracle 數(shù)據(jù)結(jié)構(gòu)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:《Office 2019高效辦公三合一從入門到精通 : 視頻自學(xué)版》 —2.1.4輸入帶圈文本
      下一篇:[渲染利器]Google官方出品的js渲染環(huán)境
      相關(guān)文章
      亚洲精品无码高潮喷水A片软| 亚洲成人免费电影| 亚洲五月综合网色九月色| 亚洲视频一区在线播放| 亚洲福利视频导航| 亚洲产国偷V产偷V自拍色戒 | 亚洲五月丁香综合视频| 亚洲伊人久久大香线焦| 亚洲精品不卡视频| 亚洲大香人伊一本线| 精品亚洲成在人线AV无码| 97se亚洲国产综合自在线| 亚洲人成电影网站久久| 中文字幕无码精品亚洲资源网久久| 亚洲午夜一区二区三区| 亚洲老熟女五十路老熟女bbw| 亚洲精品无码不卡在线播放| 在线91精品亚洲网站精品成人| 亚洲AV无码一区二区三区国产 | 久久亚洲国产精品成人AV秋霞 | 国产亚洲精品激情都市| 亚洲日韩一页精品发布| 国产美女亚洲精品久久久综合| 亚洲日本一区二区三区在线| 亚洲视频在线一区二区| 亚洲最大AV网站在线观看| 日本红怡院亚洲红怡院最新| 亚洲精品国产成人99久久| 亚洲精品在线不卡| 国产亚洲中文日本不卡二区 | 国产精品亚洲专区无码牛牛| 无码专区一va亚洲v专区在线| 2048亚洲精品国产| 亚洲αv久久久噜噜噜噜噜| 亚洲麻豆精品果冻传媒| 亚洲日韩看片无码电影| 亚洲成av人片在线观看天堂无码| 亚洲综合无码精品一区二区三区 | 亚洲天天在线日亚洲洲精| 亚洲人成伊人成综合网久久| 亚洲日韩乱码中文字幕|