Mysql - 行轉列、列轉行
原文地址:https://blog.csdn.net/jx_870915876/article/details/52403472
行轉列
有如圖所示的表,現在希望查詢的結果將行轉成列(合併欄位,表中以Name為標準)
建表語句如下:
CREATE TABLE `TEST_TB_GRADE` (
`ID` int(10) NOT NULL AUTO_INCREMENT,
`USER_NAME` varchar(20) DEFAULT NULL,
`COURSE` varchar(20) DEFAULT NULL,
`SCORE` float DEFAULT '0',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
insert into TEST_TB_GRADE(USER_NAME, COURSE, SCORE) values
("張三", "數學", 34),
("張三", "語文", 58),
("張三", "英語", 58),
("李四", "數學", 45),
("李四", "語文", 87),
("李四", "英語", 45),
("王五", "數學", 76),
("王五", "語文", 34),
("王五", "英語", 89);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
查詢語句:
此處用之所以用MAX是為了將無資料的點設為0,防止出現NULL
SELECT user_name ,
MAX(CASE course WHEN '數學' THEN score ELSE 0 END ) 數學,
MAX(CASE course WHEN '語文' THEN score ELSE 0 END ) 語文,
MAX(CASE course WHEN '英語' THEN score ELSE 0 END ) 英語
FROM test_tb_grade
GROUP BY USER_NAME;
- 1
- 2
- 3
- 4
- 5
- 6
結果展示:
列轉行
有如圖所示的表,現在希望查詢的結果將列成行(少轉多)
建表語句如下:
CREATE TABLE `TEST_TB_GRADE2` (
`ID` int(10) NOT NULL AUTO_INCREMENT,
`USER_NAME` varchar(20) DEFAULT NULL,
`CN_SCORE` float DEFAULT NULL,
`MATH_SCORE` float DEFAULT NULL,
`EN_SCORE` float DEFAULT '0',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
insert into TEST_TB_GRADE2(USER_NAME, CN_SCORE, MATH_SCORE, EN_SCORE) values
("張三", 34, 58, 58),
("李四", 45, 87, 45),
("王五", 76, 34, 89);
- 1
- 2
- 3
- 4
查詢語句:
select user_name, '語文' COURSE , CN_SCORE as SCORE from test_tb_grade2
union select user_name, '數學' COURSE, MATH_SCORE as SCORE from test_tb_grade2
union select user_name, '英語' COURSE, EN_SCORE as SCORE from test_tb_grade2
order by user_name,COURSE;
- 1
- 2
- 3
- 4
結果展示:
相關文章
- 行轉列與列轉行
- SQL 行轉列,列轉行SQL
- mysql動態行轉列MySql
- mysql基礎 行轉列MySql
- hive經典案列--top N(行轉列\列轉行)Hive
- sql的行轉列(PIVOT)與列轉行(UNPIVOT)SQL
- MySQL 行轉列詳情鍾萼MySql
- oracle列轉行Oracle
- SQL列轉行SQL
- Oracle行轉列、列轉行的Sql語句總結OracleSQL
- My SQL 列轉行操作SQL
- oracle中多列轉行Oracle
- Hive行轉列函式Hive函式
- Databricks 第11篇:Spark SQL 查詢(行轉列、列轉行、Lateral View、排序)SparkSQLView排序
- SQL 行轉列 PIVOT 學習示例SQL
- mysql~GROUP_CONCAT實現關係表的行轉列MySql
- oracle行轉列、列轉行、連續日期數字實現方式及mybatis下實現方式OracleMyBatis
- excel列轉行怎麼做 excel如何轉置行列Excel
- 【MySQL】MySQL如何合併多行資料,行轉列,group_concat 多行合併MySql
- List,DataTable實現行轉列的通用方案
- 資料庫知識點(2)——行轉列資料庫
- Linux命令之grep/sed/awk等行轉列Linux
- iOS 字典轉陣列,陣列轉字典iOS陣列
- unnest array_contains 行轉列 id in效率高AI
- 直播平臺原始碼,FlinkSQL實現行轉列原始碼SQL
- Spark SQL中列轉行(UNPIVOT)的兩種方法SparkSQL
- 用listagg函式分組實現列轉行函式
- PHP xml 轉陣列 陣列轉 xml 操作PHPXML陣列
- js將陣列轉字元,字元轉回陣列JS陣列字元
- 在Linux命令列中進行大小寫字元轉換Linux命令列字元
- 輪轉陣列陣列
- 【函式】Oracle12c 列轉行函式使用listagg函式Oracle
- Linux命令列:對內容進行大小寫字元轉換 Linux命令列字元
- PHP 陣列轉樹結構/樹結構轉陣列PHP陣列
- mac中用命令列執行mysqlMac命令列MySql
- FlinkSQL使用自定義UDTF函式行轉列-IK分詞器SQL函式分詞
- Excel 如何批次將矩陣(多行多列)資料轉為單行或單列資料Excel矩陣
- PHP陣列轉換為js陣列PHP陣列JS