MySQL行列轉(zhuǎn)化方式
初始化表結(jié)構(gòu)
CREATE TABLE `student_scores` ( `student_id` int NOT NULL, `student_name` varchar(50) DEFAULT NULL, `math_score` int DEFAULT NULL, `english_score` int DEFAULT NULL, `science_score` int DEFAULT NULL, PRIMARY KEY (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; INSERT INTO student_scores (student_id, student_name, math_score, english_score, science_score) VALUES (1, 'Alice', 85, 90, 78), (2, 'Bob', 76, 88, 92), (3, 'Charlie', 90, 85, 80);
查詢(xún)表數(shù)據(jù):

行轉(zhuǎn)化為列
由于不是我們想要的格式,我們將其轉(zhuǎn)化為列式結(jié)構(gòu):
-- 行數(shù)轉(zhuǎn)化為列 SELECT student_id, student_name, 'Math' AS subject, math_score AS score FROM student_scores UNION ALL SELECT student_id, student_name, 'English' AS subject, english_score AS score FROM student_scores UNION ALL SELECT student_id, student_name, 'Science' AS subject, science_score AS score FROM student_scores;
執(zhí)行結(jié)果:

列轉(zhuǎn)化為行
將其作為一張臨時(shí)表,對(duì)其進(jìn)行行列轉(zhuǎn)化:
select student_id,student_name,
MIN(Case when subject = 'Math' then score end ) as math_score,
MIN(case when subject = 'English' then score end )as english_score,
MIN(case when subject = 'Science' then score end )as science_score
from (
SELECT student_id, student_name, 'Math' AS subject, math_score AS score FROM student_scores
UNION ALL
SELECT student_id, student_name, 'English' AS subject, english_score AS score FROM student_scores
UNION ALL
SELECT student_id, student_name, 'Science' AS subject, science_score AS score FROM student_scores
) AS unpivoted
GROUP BY unpivoted.student_id,unpivoted.student_name
執(zhí)行結(jié)果:

擴(kuò)展
union 與 union all區(qū)別
- UNION:會(huì)自動(dòng)去除合并結(jié)果集中的重復(fù)記錄,只返回唯一的記錄。
- UNION ALL:會(huì)返回所有記錄,包括重復(fù)的記錄。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL中字符串比較大小詳解(日期字符串比較問(wèn)題)
varchar類(lèi)型的數(shù)據(jù)是不能直接比較大小的,下面這篇文章主要給大家介紹了關(guān)于MySQL中字符串比較大小的相關(guān)資料,詳細(xì)介紹了日期字符串比較問(wèn)題,需要的朋友可以參考下2022-08-08
mysql多行子查詢(xún)實(shí)戰(zhàn)案例(只包含不相關(guān)子查詢(xún))
在MySQL中多行子查詢(xún)(也稱(chēng)為 IN 子查詢(xún))是指子查詢(xún)返回多行數(shù)據(jù),并且這些數(shù)據(jù)用于主查詢(xún)中的某個(gè)條件判斷,這篇文章主要介紹了mysql多行子查詢(xún)(只包含不相關(guān)子查詢(xún))的相關(guān)資料,需要的朋友可以參考下2024-10-10
MySQL錯(cuò)誤1449: The user specified as
在使用MySQL數(shù)據(jù)庫(kù)時(shí),有時(shí)會(huì)遇到錯(cuò)誤??1449: The user specified as a definer ('root'@'%') does not exist??,本文將詳細(xì)介紹這個(gè)錯(cuò)誤的原因以及如何解決它,需要的朋友可以參考下2025-05-05
MYSQL主庫(kù)切換binlog模式后主從同步錯(cuò)誤的解決方案
在使用FlinkSQL的mysql-cdc連接器來(lái)監(jiān)聽(tīng)MySQL數(shù)據(jù)庫(kù)時(shí),通常需要將MySQL的binlog模式設(shè)置為ROW模式,當(dāng)我們將MySQL主庫(kù)的binlog模式從STATEMENT切換為ROW并重啟MySQL服務(wù)后,MySQL從庫(kù)在同步時(shí)可能會(huì)報(bào)錯(cuò),所以本文介紹了MYSQL主庫(kù)切換binlog模式后主從同步錯(cuò)誤的解決方案2024-08-08
MySQL 字符串拆分實(shí)例(無(wú)分隔符的字符串截取)
這篇文章主要介紹了MySQL 字符串拆分實(shí)例(無(wú)分隔符的字符串截取),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
MySQL 5.6.36 Windows x64位版本的安裝教程詳解
這篇文章主要介紹了MySQL 5.6.36 Windows x64位版本的安裝教程詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-05-05
阿里云服務(wù)器安裝Mysql數(shù)據(jù)庫(kù)的詳細(xì)教程
這篇文章主要介紹了阿里云服務(wù)器安裝Mysql數(shù)據(jù)庫(kù)的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
利用explain排查分析慢sql的實(shí)戰(zhàn)案例
在日常工作中,我們會(huì)有時(shí)會(huì)開(kāi)慢查詢(xún)?nèi)ビ涗浺恍﹫?zhí)行時(shí)間比較久的SQL語(yǔ)句,下面這篇文章主要給大家介紹了關(guān)于利用explan排查分析慢sql的相關(guān)資料,需要的朋友可以參考下2022-04-04
Mysql 日期時(shí)間 DATE_FORMAT(date,format)
Mysql 日期時(shí)間 DATE_FORMAT(date,format) ,需要的朋友可以參考下。2010-12-12

