精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SQL實用技巧-行列轉換

數據庫 SQL Server
PIVOT關鍵字對于指定的每一組行值,都會生成對應的列。PIVOT關鍵字是FROM子句的一部分,可以和JOIN等其他關鍵字一同使用

在編寫大數據SQL的時候,有時需要進行行列的轉化。

什么是行列轉化?如下圖,不同商品在不同月份的銷量數據,有時候我們希望數據和左側一樣的排列,但原始數據卻像右側一樣排列,此時我們需要把右側的列排列轉換成左側的行排列,反之亦然。

行轉列與列轉行行轉列與列轉行

下面以上面這個例子為大家介紹一些行列轉換的方式。

行轉列

使用CASE WHEN

適用場景:MySQL、Hive、Spark SQL。

把行轉換成列最簡單的方式就是使用CASE WHEN。

case month when '2024-01' then sales end的意思是當month的值為'2024-01'時取sales的值,其他情況取NULL,因此可以計算出不同月份的銷量。

select  product
        ,max(case month when '2024-01' then sales end) as month_01
        ,max(case month when '2024-02' then sales end) as month_02
        ,max(case month when '2024-03' then sales end) as month_03
from    sales_row
group by product

使用PIVOT

適用場景:Spark SQL。

PIVOT關鍵字對于指定的每一組行值,都會生成對應的列。PIVOT關鍵字是FROM子句的一部分,可以和JOIN等其他關鍵字一同使用。

SELECT ... 
FROM ... 
PIVOT ( 
    <aggregate function> [AS <alias>] [, <aggregate function> [AS <alias>]] ... 
    FOR (<column> [, <column>] ...) 
    IN ( 
        (<value> [, <value>] ...) AS <new column> 
        [, (<value> [, <value>] ...) AS <new column>] 
        ... 
       ) 
    ) 
[...]

參數

是否必選

說明

aggregate function


聚合函數

alias


聚合函數的別名,別名和最終PIVOT處理過后生成的列名相關

column


指定轉換為列的行值在源表中的列名稱

value


指定轉換為列的行值

new column


轉換后新的列名稱

直接看示例。

利用PIVOT把month列按值聚合出了三列month_01,month_02,month_03。

select  *
from    sales_row 
PIVOT (
     MAX(sales) for month in(
       '2024-01' as month_01, 
       '2024-02' as month_02, 
       '2024-03' as month_03
     )
)

列轉行

使用UNION ALL

適用場景:MySQL、Hive、Spark SQL。

UNION ALL相當于取每一個列的值,然后并聯在一起,注意'2024-01' as month中的2024-01是字符串。

使用UNION ALL的好處就是,無論是mysql、hive還是spark都支持,以不變應萬變。

缺點就是當要關聯列比較多時比較麻煩,如果要查詢全年的數據,則需要UNION ALL 12次,如果是天數據則要UNION ALL 365次。

select  *
from    (
    select product, '2024-01' as month, month_01 from sales_column
    union all
    select product, '2024-02' as month, month_02 from sales_column
    union all
    select product, '2024-03' as month, month_03 from sales_column
)

僅使用EXPLODE

適用場景:Spark SQL。

explode可以將一個數組或者map分解成多行,例如:

select explode(split('A,B,C', ','))

# 結果
col
A
B
C
select explode(map('2024-01', 1000, '2024-02', 2000, '2024-03', 3000))

# 結果
key     value
2024-01 1000
2024-02 2000
2024-03 3000

對于列轉行的需求,可以先創建一個map之后再利用explode拆分成多行。

注意下面SQL中,explode函數返回值有兩個,因此設置列別名時需要用as (month, sales)。

select  product
        ,explode(
          map('2024-01', month_01, 
              '2024-02', month_02, 
              '2024-03', month_03)
        ) as (month, sales)
from    sales_column

類似的思路還可以利用concat+trans_array等操作。

hive中的UDTF

上面的方式僅適用于Spark。

當使用UDTF函數(explode就是一個UDTF函數)的時候,Hive只允許對拆分字段進行訪問。

select explode(map('2024-01', 1000, '2024-02', 2000, '2024-03', 3000))

# 結果
key     value
2024-01 1000
2024-02 2000
2024-03 3000

也就是說在Hive中,上面SQL是沒問題的,下面的SQL就會報錯了

hive> select  product
    >   ,explode(map('2024-01', month_01, '2024-02', month_02, '2024-03', month_03))
  >  from    sales_column

SemanticException [Error 10081]: UDTF's are not supported outside the SELECT clause, nor nested in expressions

因此這塊需要使用LATERAL VIEW功能來進行處理。LATERAL VIEW將explode生成的結果當做一個視圖來處理。

使用Lateral View

適用場景:Hive、Spark SQL。

lateral view為側視圖,意義是為了配合UDTF來使用,把某一行數據拆分成多行數據。

Hive中不加lateral view的UDTF只能提取單個字段拆分。加上lateral view就可以將拆分的單個字段數據與原始表數據關聯上。

LATERAL VIEW [ OUTER ] generator_function ( expression [ , ... ] ) [ table_alias ] AS column_alias [ , ... ]

參數

是否必選

說明

generator_function


將一行數據拆成多行數據的UDTF (EXPLODE, INLINE等)

table_alias


UDTF結果的別名

columnAlias


拆分后得到的列的別名

直接看如何利用lateral view實現列轉行。

select  product, t_view.month, t_view.sales
from    sales_column
lateral view explode(
    map('2024-01', month_01, '2024-02', month_02, '2024-03', month_03)
) t_view as month, sales

其中explode(map('2024-01', month_01, '2024-02', month_02, '2024-03', month_03))把map分解成多行。

lateral view同時指定了這個側視的表名t_view和兩列的列名month 、sales。

lateral view explode(
    map('2024-01', month_01, '2024-02', month_02, '2024-03', month_03)
) t_view as month, sales

# 模擬結果,lateral view不能單獨使用
month sales
2024-01 1000
2024-02 1100
2024-03 1200
2024-01 1100
2024-02 1000
2024-03 1400

此時select product, t_view.month, t_view.sales就能達成UDTF拆分的單個字段數據與原始表數據關聯的效果了。

select  product, t_view.month, t_view.sales
from    sales_column

# 結果
product month sales
A 2024-01 1000
A 2024-02 1100
A 2024-03 1200
B 2024-01 1100
B 2024-02 1000
B 2024-03 1400

使用UNPIVOT

適用場景:Spark 3.4+。

UNPIVOT關鍵字對于指定的每一組列,都會生成對應的行。其中UNPIVOT關鍵字是FROM子句的一部分,可以和JOIN關鍵字等其他關鍵字一同使用。

SELECT ...
FROM ...
UNPIVOT (
  <new column of value> [, <new column of value>] ...
  FOR (<new column of name> [, <new column of name>] ...)
  IN (
      (<column> [, <column>] ...) [AS (<column value> [, <column value>] ...)]
      [, (<column> [, <column>] ...) [AS (<column value> [, <column value>] ...)]]
      ...
    )
)
[...]

參數說明如下:

參數

是否必選

說明

new column of value


轉換后新生成的列名稱,該列的值由指定轉換為行的列的值填充。

new column of name


轉換后新生成的列名稱,該列的值由指定轉換為行的列名稱填充。

column


指定轉換為行的列名稱,列的名稱用來填充new column of name;列的值用來填充new column of value。

column value


指定轉換為行的列的別名

也是直接看示例:

select  *
from    sales_column 
UNPIVOT (
  sales for month in (month_01 as '2024-01', month_02 as '2024-02', month_03 as '2024-03')
)

sales for month in (month_01, month_02, month_03)的意思就是生成一個新列sales,這一列的值是month_01, month_02, month_03這三列的值。

生成一個新列month, 這里一列的值是month_01, month_02, month_03這三列的列名,即'2024-01',  '2024-02', '2024-03'。

責任編輯:武曉燕 來源: 涼涼的知識庫
相關推薦

2009-09-04 10:27:28

Linux實用技巧linux操作系統linux

2022-03-23 09:18:10

Git技巧Linux

2009-12-21 15:50:39

2009-01-03 09:34:30

ASP.NET.NET性能優化

2022-10-11 08:00:47

多線程開發技巧

2011-04-08 15:40:01

Oracle認證

2022-11-03 10:28:59

PandasSAC機制

2010-09-14 10:41:24

DIV+CSS排版

2010-10-08 15:44:17

vim

2009-12-09 11:21:30

Linux實用技巧

2019-12-22 23:10:19

LinuxSSH加密

2019-11-25 10:12:59

Python技巧工具

2019-10-10 16:31:51

PyCharmPythonWindows

2009-12-23 17:32:35

Linux構建軟路由

2010-11-02 15:36:30

jQuery

2019-10-12 15:42:36

CSS代碼前端

2022-05-30 09:01:13

CSS技巧前端

2022-09-15 07:05:09

Windows電腦技巧

2012-08-28 08:54:16

Windows Ser

2024-03-28 08:15:09

Spring技巧配置
點贊
收藏

51CTO技術棧公眾號

熟女少妇内射日韩亚洲| 国产老熟妇精品观看| 97精品久久人人爽人人爽| 亚洲综合色站| 亚洲激情视频网站| 男女av免费观看| 九色porny在线| 成人黄色大片在线观看| 国产精品久久久久久久久久久久 | 美女精品视频在线| 婷婷久久综合九色国产成人| 色女孩综合网| 丁香六月色婷婷| 日本美女视频一区二区| 欧美激情免费观看| 91视频免费看片| 久久精品66| 欧美一区2区视频在线观看| 青青青免费在线| 理论片午午伦夜理片在线播放| 99视频精品全部免费在线| 国产精品久久色| 色婷婷av国产精品| 欧美大片一区| 色哟哟网站入口亚洲精品| 性生活一级大片| 成人网ww555视频免费看| 亚洲午夜一区二区| 99热都是精品| 中文字幕在线视频区| 99精品视频在线观看| 91亚洲精品丁香在线观看| 超碰在线97观看| 免费亚洲视频| 国色天香2019中文字幕在线观看| 色哟哟一一国产精品| 精品国产91久久久久久浪潮蜜月| 精品国产a毛片| 日本特黄在线观看| 精品亚洲二区| 欧美日韩国产一二三| 黄色一级免费大片| 韩国成人免费视频| 夜夜嗨av一区二区三区| 亚洲 欧洲 日韩| 生活片a∨在线观看| 国产日本欧洲亚洲| 日韩精品一区二区三区外面| 亚洲区小说区图片区| av男人天堂一区| 精品欧美一区二区精品久久| 黄色一级大片在线免费看国产| 国内久久精品视频| 91在线精品播放| 国产伦理吴梦梦伦理| 久久99久久久欧美国产| 国产欧美日韩亚洲精品| 国产精品成人无码| 青青草国产成人99久久| 国产精品视频内| 在线播放精品视频| 久久www免费人成看片高清| 国产精品一区二区三区久久| 中国黄色一级视频| 精久久久久久久久久久| 成人免费视频网| 国产美女永久免费| 国产成人av资源| 国产精品久久久久久久久久久久冷| 亚洲AV无码精品色毛片浪潮| www.日本不卡| 欧美一区二区三区成人久久片| 国产69久久| 亚洲欧洲成人精品av97| 亚洲啊啊啊啊啊| 国产精品蜜芽在线观看| 色综合久久久久网| 色播五月综合网| 免费观看亚洲视频大全| 精品国产一区二区亚洲人成毛片 | 国产一区二区女内射| 国产一区二区在线电影| 国产91社区| 免费在线高清av| 国产精品久久三| 国产美女永久无遮挡| 性欧美又大又长又硬| 欧美色图片你懂的| 日本精品一二三区| 国产aⅴ精品一区二区三区久久| 国产亚洲欧美视频| 青草草在线视频| 久久午夜视频| 亚洲伊人第一页| 亚洲aaaaaaa| 亚洲色图制服丝袜| 男人靠女人免费视频网站| 日韩成人在线电影| 亚洲精品v天堂中文字幕 | 欧美丰满日韩| 国内精品伊人久久| 中文字幕有码视频| 成人夜色视频网站在线观看| 婷婷亚洲婷婷综合色香五月| 青青草视频在线免费直播| 欧美艳星brazzers| 李丽珍裸体午夜理伦片| 国产精品久久久久无码av| 国产最新精品视频| 国产裸体无遮挡| 久久精品无码一区二区三区| 青青视频免费在线| a屁视频一区二区三区四区| 亚洲电影免费观看高清| 一区二区三区影视| 日韩电影免费在线观看网站| 国产高清精品一区| 成人国产免费电影| 欧美日韩午夜在线视频| 国产精品亚洲无码| 亚洲国产国产亚洲一二三| 成人h猎奇视频网站| 免费福利在线视频| 亚洲成在人线在线播放| 1314成人网| 欧美好骚综合网| 国产精品久久久久77777| 天天操天天干天天| 亚洲国产中文字幕在线视频综合| 奇米影视四色在线| av在线不卡顿| 国产97在线亚洲| 天堂网av在线播放| 亚洲成人在线网站| 亚洲av无码一区东京热久久| 91超碰国产精品| 国产日本欧美一区| 午夜在线免费观看视频| 在线亚洲一区二区| 久久久久亚洲av成人无码电影| 亚洲福利电影| 国产伦精品一区二区三区高清| 影音先锋在线视频| 日韩欧美在线影院| 成人观看免费视频| 国产黄色精品网站| 一级黄色片播放| 久久久91麻豆精品国产一区| www.亚洲男人天堂| 一级做a爰片久久毛片16| 欧美激情一区二区三区全黄| 日韩中文字幕免费在线| 伊人成综合网yiren22| 青青a在线精品免费观看| 日产精品久久久久久久性色| 欧美色播在线播放| 91中文字幕永久在线| 日韩国产成人精品| 亚洲欧洲日本国产| 国产亚洲久久| 欧美日本啪啪无遮挡网站| 隣の若妻さん波多野结衣| 性做久久久久久久久| 99久久人妻无码中文字幕系列| 国产精品亚洲欧美| 日韩三级电影| www.久久99| 久久久免费观看视频| 天堂av中文在线资源库| 91极品美女在线| 午夜精品久久久久99蜜桃最新版 | 91欧美视频网站| 青春草在线视频| 亚洲欧美日韩精品久久奇米色影视| 欧美成人一区二区三区四区| 国产精品久久久久久久久免费樱桃 | 91精品免费在线观看| 精品无码一区二区三区电影桃花| av电影天堂一区二区在线| 国产日韩成人内射视频| 久久久久久久久99精品大| 国产精品国产亚洲精品看不卡15| 成人福利av| 不卡中文字幕av| 日韩在线免费看| 欧美日韩国产精选| 久久影院一区二区| 国产午夜精品一区二区| 国产一级片中文字幕| 在线亚洲精品| 中文字幕日韩精品一区二区| 麻豆一区二区麻豆免费观看| 国产精品无av码在线观看| 欧美黑人xx片| 中文字幕无线精品亚洲乱码一区 | 亚洲精品小视频| 伊人精品在线视频| 亚洲国产综合人成综合网站| 久久午夜精品视频| 成人av在线播放网址| 视色视频在线观看| 一区二区国产精品| 9l视频自拍9l视频自拍| 日韩高清在线免费观看| 91热精品视频| 手机看片久久| 国产做受高潮69| 97超碰在线公开在线看免费| 亚洲欧洲成视频免费观看| www久久久com| 欧美日韩国产一级片| 亚洲国产精品无码久久久| 亚洲国产精品精华液网站| 免费观看特级毛片| 91免费在线视频观看| 久久久久99人妻一区二区三区| 琪琪一区二区三区| 97xxxxx| 亚洲欧洲一级| 无码人妻精品一区二区蜜桃百度| 欧美在线观看视频一区| 久久视频在线观看中文字幕| 97品白浆高清久久久久久| 91精品国产综合久久男男| 日韩在线免费| 国产99视频在线观看| 麻豆理论在线观看| 高清一区二区三区四区五区| 欧美xxxx黑人又粗又长| www.欧美精品| 免费av在线| 最新的欧美黄色| 91在线不卡| 在线观看成人黄色| 成年人在线视频免费观看| 亚洲人成亚洲人成在线观看| 四虎精品在永久在线观看| 亚洲福利视频二区| 欧美一级片免费| 欧美精品一区二区三区很污很色的 | 久久精品女人| 日韩中文字幕二区| 丝袜美腿一区二区三区| 国产日韩一区二区在线观看| 国产精品亚洲欧美| 成年人黄色片视频| 久久午夜精品| 孩娇小videos精品| 麻豆精品视频在线观看视频| 免费看污黄网站| 蜜桃一区二区三区在线观看| 校园春色 亚洲色图| 美女国产一区二区| 久久精品视频在线观看免费| 国产一区二区在线影院| 亚洲国产日韩在线一区| 国产盗摄精品一区二区三区在线| 亚洲色图欧美自拍| 高清久久久久久| 中文字幕在线播放一区| 26uuuu精品一区二区| 欧美图片第一页| 国产精品日韩成人| 最新一区二区三区| 亚洲一区二区三区视频在线播放| 国产精品9191| 欧美丝袜一区二区| 中文字幕在线播放av| 欧美一区二区三区在线看| 亚洲国产精品suv| 亚洲欧美国产视频| 欧美精品videos另类| 久久91精品国产91久久久| 第一福利在线视频| 国产精品第二页| 看亚洲a级一级毛片| 国产日韩欧美二区| 欧美日韩国产一区二区三区不卡 | 午夜亚洲视频| 亚洲一区日韩精品| 成人动漫视频在线| 久久视频精品在线观看| 亚洲欧美一区二区三区国产精品 | 日韩主播视频在线| 欧美日韩久久婷婷| 91麻豆福利精品推荐| 国产精品久久国产精麻豆96堂| 亚洲图片自拍偷拍| 久久人人爽人人爽人人片av免费| 91精品国产一区二区人妖| 午夜成人免费影院| 久久伊人色综合| 性感女国产在线| 91欧美精品午夜性色福利在线| 台湾佬综合网| 国产精品99久久久久久大便| 先锋影音久久久| 久久精品无码一区二区三区毛片 | 欧美成人精品1314www| 男男激情在线| 欧美激情一二区| 黄色成人小视频| 精品免费日产一区一区三区免费| 91成人免费| 久久精品视频91| 成人av中文字幕| 三级全黄做爰视频| 欧美自拍偷拍一区| 少妇精品高潮欲妇又嫩中文字幕| xxxx欧美18另类的高清| 桃花岛成人影院| 国产乱码精品一区二区三区中文| 日韩欧美精品一区| 韩国日本在线视频| 成人av在线网站| 免费在线视频一区二区| 欧美日韩国产123区| 免费在线看v| 欧美一级视频免费在线观看| 伊人久久影院| 蜜臀在线免费观看| 九九国产精品视频| 男女全黄做爰文章| 欧美伊人精品成人久久综合97| 日本福利片在线| 欧美一级免费视频| 欧美一区自拍| 久久久999视频| 不卡视频在线观看| 久久久久99精品| 日韩欧美中文字幕制服| www在线免费观看视频| 国产精品一区久久| 成人在线丰满少妇av| 邪恶网站在线观看| 国产精品入口麻豆原神| 亚洲一二区视频| 最新国产精品亚洲| 亚洲一区有码| www国产免费| 成人免费视频国产在线观看| 九九视频免费在线观看| 日韩欧美一级二级三级久久久| 国产三区视频在线观看| 91在线视频精品| 一区二区电影| 又色又爽又黄18网站| 亚洲一区国产视频| 好男人在线视频www| 国产做受高潮69| 免费看av成人| 天天碰免费视频| 中文字幕中文字幕一区二区| 91激情在线观看| 毛片精品免费在线观看| 亚洲一区二区三区在线免费 | 强制高潮抽搐sm调教高h| 欧美日本一区二区三区| 久操视频在线播放| 国产精品久久久久av福利动漫| 99人久久精品视频最新地址| 成人乱码一区二区三区av| 精品视频一区 二区 三区| 国产三区视频在线观看| julia一区二区中文久久94| 亚洲国产午夜| 亚洲v国产v欧美v久久久久久| 欧美这里有精品| www视频在线看| 精品综合久久| 奇米综合一区二区三区精品视频| 亚洲欧美精品aaaaaa片| 亚洲激情视频在线播放| 亚洲mmav| wwwwww欧美| 久久久久一区二区三区四区| 最近中文字幕在线免费观看| 久久精品夜夜夜夜夜久久| 第一区第二区在线| 无码无遮挡又大又爽又黄的视频| 综合电影一区二区三区 | 国产亚洲免费的视频看| 精品一区二区三区在线观看视频| 六月婷婷在线视频| 欧美极品少妇xxxxⅹ高跟鞋| www.国产免费| 日本一本a高清免费不卡| 性欧美69xoxoxoxo| 99久久人妻无码中文字幕系列| 欧美日韩精品高清| 精精国产xxxx视频在线播放| 亚洲资源在线网| 99re热这里只有精品视频| 6—12呦国产精品| 97香蕉超级碰碰久久免费软件 | 国产精品视频一二三区| 国精产品乱码一区一区三区四区| 国产91精品在线播放| 国产一区二区中文| 青青青手机在线视频|