SQL如何實(shí)現(xiàn)數(shù)據(jù)表行轉(zhuǎn)列、列轉(zhuǎn)行?
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
SQL行轉(zhuǎn)列、列轉(zhuǎn)行可以幫助我們更方便地處理數(shù)據(jù),生成需要的報(bào)表和結(jié)果集。本文將介紹在SQL中如何實(shí)現(xiàn)數(shù)據(jù)表地行轉(zhuǎn)列、列轉(zhuǎn)行操作,以及實(shí)際應(yīng)用示例。 這里通過表下面三張表進(jìn)行舉例,建表語(yǔ)句和示例數(shù)據(jù)插入語(yǔ)句可以查看我之前的文章。
數(shù)據(jù)表示例數(shù)據(jù)分別如下: data_learning.product_order(商品銷量表): data_learning.product(商品信息表): data_learning.product_category(商品二級(jí)分類信息表): 01 1.1 使用CASE WHEN語(yǔ)句+聚合函數(shù)問題:請(qǐng)查詢女裙和兒童家具的銷量,輸出結(jié)果形式為女裙銷量作為一列,兒童家具作為一列。 SQL: SELECT SUM(CASE WHEN c.category_name = '女裙' THEN a.sales_volume ELSE 0 END) AS 女裙銷量 ,SUM(CASE WHEN c.category_name = '兒童家具' THEN a.sales_volume ELSE 0 END) AS 兒童家具銷量 FROM data_learning.product_order a LEFT JOIN ( SELECT * FROM data_learning.product_category )c on a.category_id = c.category_id ; 結(jié)果如下: 1.2 使用if函數(shù)+聚合函數(shù)同樣是上面那個(gè)問題,用第二種方式如何實(shí)現(xiàn)呢? SQL: SELECT SUM(IF(c.category_name = '女裙',sales_volume,0 )) AS 女裙銷量 ,SUM(IF(c.category_name = '兒童家具',sales_volume,0)) AS 兒童家具銷量 FROM data_learning.product_order a LEFT JOIN ( SELECT * FROM data_learning.product_category )c on a.category_id = c.category_id ; 結(jié)果如下: 在實(shí)際工作中,使用場(chǎng)景可能比這個(gè)復(fù)雜。 比如“請(qǐng)查詢每個(gè)月女裙和兒童家具地銷量,輸出結(jié)果形式為女裙銷量作為一列,兒童家具作為一列”。這個(gè)時(shí)候,可以結(jié)合GROUP BY語(yǔ)句去實(shí)現(xiàn)。 同時(shí),聚合函數(shù)可能也不一定是SUM,有可能是MAX,這個(gè)都要根據(jù)具體的業(yè)務(wù)定義,數(shù)據(jù)表內(nèi)容等去靈活運(yùn)用。 02 2.1 使用 UNION ALL或UNION語(yǔ)句我們將上面行轉(zhuǎn)列的數(shù)據(jù)結(jié)果插入到一張臨時(shí)表data_learning.tmp_test,然后用這個(gè)把這個(gè)表的結(jié)果做列轉(zhuǎn)行操作,也就是女裙和兒童家具變成行。 step1 : 上面的查詢結(jié)果存入臨時(shí)表。(實(shí)際工作中不用,這里僅僅是想用上面的數(shù)據(jù)另建一張表作為操作示例) CREATE TABLE data_learning.tmp_test AS SELECT SUM(IF(c.category_name = '女裙',sales_volume,0 )) AS 女裙銷量 ,SUM(IF(c.category_name = '兒童家具',sales_volume,0)) AS 兒童家具銷量 FROM data_learning.product_order a LEFT JOIN ( SELECT * FROM data_learning.product_category )c on a.category_id = c.category_id ; step2:做列轉(zhuǎn)行操作 SQL: SELECT '女裙' AS 類別 ,女裙銷量 AS 銷量 FROM data_learning.tmp_test UNION ALL SELECT '兒童家具' AS 類別 ,兒童家具銷量 AS 銷量 FROM data_learning.tmp_test ; 結(jié)果如下: 行轉(zhuǎn)列與列轉(zhuǎn)行是SQL中非常重要的數(shù)據(jù)轉(zhuǎn)換技巧。通過掌握這些技巧,你可以更加靈活地處理和分析數(shù)據(jù),提高數(shù)據(jù)處理效率。希望本文能對(duì)你有所幫助! 該文章在 2024/2/1 23:19:14 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |