學(xué)習(xí)mysql?如何行轉(zhuǎn)列與列傳行
一、行轉(zhuǎn)列— case+group by
mysql> 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;
插入數(shù)據(jù):
mysql> insert into TEST_TB_GRADE(USER_NAME, COURSE, SCORE) values ? ? -> ("張三", "數(shù)學(xué)", 34), ? ? -> ("張三", "語文", 58), ? ? -> ("張三", "英語", 58), ? ? -> ("李四", "數(shù)學(xué)", 45), ? ? -> ("李四", "語文", 87), ? ? -> ("李四", "英語", 45), ? ? -> ("王五", "數(shù)學(xué)", 76), ? ? -> ("王五", "語文", 34), ? ? -> ("王五", "英語", 89);
查詢表:
mysql> select * from test_tb_grade; +----+-----------+--------+-------+ | ID | USER_NAME | COURSE | SCORE | +----+-----------+--------+-------+ | ?1 | 張三 ? ? ?| 數(shù)學(xué) ? | ? ?34 | | ?2 | 張三 ? ? ?| 語文 ? | ? ?58 | | ?3 | 張三 ? ? ?| 英語 ? | ? ?58 | | ?4 | 李四 ? ? ?| 數(shù)學(xué) ? | ? ?45 | | ?5 | 李四 ? ? ?| 語文 ? | ? ?87 | | ?6 | 李四 ? ? ?| 英語 ? | ? ?45 | | ?7 | 王五 ? ? ?| 數(shù)學(xué) ? | ? ?76 | | ?8 | 王五 ? ? ?| 語文 ? | ? ?34 | | ?9 | 王五 ? ? ?| 英語 ? | ? ?89 | +----+-----------+--------+-------+
不用聚集函數(shù)和group by語句:
mysql> SELECT user_name , ? ? -> ? (CASE course WHEN '數(shù)學(xué)' THEN score ELSE 0 END ) 數(shù)學(xué), ? ? -> ? (CASE course WHEN '語文' THEN score ELSE 0 END ) 語文, ? ? -> ? (CASE course WHEN '英語' THEN score ELSE 0 END ) 英語 ? ? -> FROM test_tb_grade; +-----------+--------+--------+--------+ | user_name | 數(shù)學(xué) ? | 語文 ? | 英語 ? | +-----------+--------+--------+--------+ | 張三 ? ? ?| ? ? 34 | ? ? ?0 | ? ? ?0 | | 張三 ? ? ?| ? ? ?0 | ? ? 58 | ? ? ?0 | | 張三 ? ? ?| ? ? ?0 | ? ? ?0 | ? ? 58 | | 李四 ? ? ?| ? ? 45 | ? ? ?0 | ? ? ?0 | | 李四 ? ? ?| ? ? ?0 | ? ? 87 | ? ? ?0 | | 李四 ? ? ?| ? ? ?0 | ? ? ?0 | ? ? 45 | | 王五 ? ? ?| ? ? 76 | ? ? ?0 | ? ? ?0 | | 王五 ? ? ?| ? ? ?0 | ? ? 34 | ? ? ?0 | | 王五 ? ? ?| ? ? ?0 | ? ? ?0 | ? ? 89 | +-----------+--------+--------+--------+
用group by語句:
mysql> SELECT user_name , ? ? -> ? (CASE course WHEN '數(shù)學(xué)' THEN score ELSE 0 END ) 數(shù)學(xué), ? ? -> ? (CASE course WHEN '語文' THEN score ELSE 0 END ) 語文, ? ? -> ? (CASE course WHEN '英語' THEN score ELSE 0 END ) 英語 ? ? -> FROM test_tb_grade ? ? -> group by user_name; +-----------+--------+--------+--------+ | user_name | 數(shù)學(xué) ? | 語文 ? | 英語 ? | +-----------+--------+--------+--------+ | 張三 ? ? ?| ? ? 34 | ? ? ?0 | ? ? ?0 | | 李四 ? ? ?| ? ? 45 | ? ? ?0 | ? ? ?0 | | 王五 ? ? ?| ? ? 76 | ? ? ?0 | ? ? ?0 | +-----------+--------+--------+--------+
用group by語句和聚集函數(shù)實現(xiàn)行轉(zhuǎn)列:
mysql> SELECT user_name , ? ? -> ? MAX(CASE course WHEN '數(shù)學(xué)' THEN score ELSE 0 END ) 數(shù)學(xué), ? ? -> ? 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; +-----------+--------+--------+--------+ | user_name | 數(shù)學(xué) ? | 語文 ? | 英語 ? | +-----------+--------+--------+--------+ | 張三 ? ? ?| ? ? 34 | ? ? 58 | ? ? 58 | | 李四 ? ? ?| ? ? 45 | ? ? 87 | ? ? 45 | | 王五 ? ? ?| ? ? 76 | ? ? 34 | ? ? 89 | +-----------+--------+--------+--------+
二、列轉(zhuǎn)行——union
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;
插入數(shù)據(jù):
insert into TEST_TB_GRADE2(USER_NAME, CN_SCORE, MATH_SCORE, EN_SCORE) values ("張三", 34, 58, 58), ("李四", 45, 87, 45), ("王五", 76, 34, 89);
查詢:
mysql> select * from test_tb_grade2; +----+-----------+----------+------------+----------+ | ID | USER_NAME | CN_SCORE | MATH_SCORE | EN_SCORE | +----+-----------+----------+------------+----------+ | ?1 | 張三 ? ? ?| ? ? ? 34 | ? ? ? ? 58 | ? ? ? 58 | | ?2 | 李四 ? ? ?| ? ? ? 45 | ? ? ? ? 87 | ? ? ? 45 | | ?3 | 王五 ? ? ?| ? ? ? 76 | ? ? ? ? 34 | ? ? ? 89 | +----+-----------+----------+------------+----------+
不求并集:
mysql> select user_name, '語文' COURSE , CN_SCORE as SCORE from test_tb_grade2; +-----------+--------+-------+ | user_name | COURSE | SCORE | +-----------+--------+-------+ | 張三 ? ? ?| 語文 ? | ? ?34 | | 李四 ? ? ?| 語文 ? | ? ?45 | | 王五 ? ? ?| 語文 ? | ? ?76 | +-----------+--------+-------+
求并集:
mysql> select user_name, '語文' COURSE , CN_SCORE as SCORE from test_tb_grade2 ? ? -> union select user_name, '數(shù)學(xué)' COURSE, MATH_SCORE as SCORE from test_tb_grade2 ? ? -> union select user_name, '英語' COURSE, EN_SCORE as SCORE from test_tb_grade2; +-----------+--------+-------+ | user_name | COURSE | SCORE | +-----------+--------+-------+ | 張三 ? ? ?| 語文 ? | ? ?34 | | 李四 ? ? ?| 語文 ? | ? ?45 | | 王五 ? ? ?| 語文 ? | ? ?76 | | 張三 ? ? ?| 數(shù)學(xué) ? | ? ?58 | | 李四 ? ? ?| 數(shù)學(xué) ? | ? ?87 | | 王五 ? ? ?| 數(shù)學(xué) ? | ? ?34 | | 張三 ? ? ?| 英語 ? | ? ?58 | | 李四 ? ? ?| 英語 ? | ? ?45 | | 王五 ? ? ?| 英語 ? | ? ?89 | +-----------+--------+-------+
order by語句:
mysql> select user_name, '語文' COURSE , CN_SCORE as SCORE from test_tb_grade2 ? ? -> union select user_name, '數(shù)學(xué)' 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; +-----------+--------+-------+ | user_name | COURSE | SCORE | +-----------+--------+-------+ | 張三 ? ? ?| 數(shù)學(xué) ? | ? ?58 | | 張三 ? ? ?| 英語 ? | ? ?58 | | 張三 ? ? ?| 語文 ? | ? ?34 | | 李四 ? ? ?| 數(shù)學(xué) ? | ? ?87 | | 李四 ? ? ?| 英語 ? | ? ?45 | | 李四 ? ? ?| 語文 ? | ? ?45 | | 王五 ? ? ?| 數(shù)學(xué) ? | ? ?34 | | 王五 ? ? ?| 英語 ? | ? ?89 | | 王五 ? ? ?| 語文 ? | ? ?76 | +-----------+--------+-------+
到此這篇關(guān)于mysql 行轉(zhuǎn)列與列傳行的文章就介紹到這了,更多相關(guān)mysql 行轉(zhuǎn)列與列傳行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL數(shù)據(jù)庫索引原理及優(yōu)化策略
MySQL數(shù)據(jù)庫索引是一種數(shù)據(jù)結(jié)構(gòu),用于提高數(shù)據(jù)查詢的效率,加快數(shù)據(jù)檢索的速度。索引基于樹結(jié)構(gòu)實現(xiàn),可以通過B+樹等算法來優(yōu)化索引效率。MySQL中常見的索引類型包括主鍵索引、唯一索引、普通索引、全文索引等2023-04-04mysql unix準(zhǔn)換時間格式查找指定日期數(shù)據(jù)代碼
這篇文章主要介紹了mysql unix準(zhǔn)換時間格式查找指定日期數(shù)據(jù),需要的朋友可以參考下2014-03-03SQL中寫入包含有英文單引號“ '''' ”失敗問題深入詳解
這篇文章主要介紹了SQL中寫入包含有英文單引號“ ' ”失敗問題深入詳解,列舉了具體實例講解,有感興趣的同學(xué)可以研究下2021-03-03Mysql錯誤1366 - Incorrect integer value解決方法
這篇文章主要介紹了Mysql錯誤1366 - Incorrect integer value解決方法,本文通過修改字段默認(rèn)值解決,需要的朋友可以參考下2014-09-09