MySQL行列互換的實現(xiàn)示例
場景1 行轉(zhuǎn)換列
1、表結(jié)構(gòu)和數(shù)據(jù)
/* Navicat Premium Data Transfer Source Server : 本地 Source Server Type : MySQL Source Server Version : 80027 Source Host : localhost:3306 Source Schema : school Target Server Type : MySQL Target Server Version : 80027 File Encoding : 65001 Date: 13/06/2024 14:50:51 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for score -- ---------------------------- DROP TABLE IF EXISTS `score`; CREATE TABLE `score` ( `stu_no` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '學(xué)號', `course_no` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '課程號', `score_prize` decimal(4, 1) NULL DEFAULT NULL COMMENT '成績', PRIMARY KEY (`stu_no`, `course_no`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of score -- ---------------------------- INSERT INTO `score` VALUES ('0001', '0001', 40.0); INSERT INTO `score` VALUES ('0001', '0002', 50.0); INSERT INTO `score` VALUES ('0001', '0003', 48.0); INSERT INTO `score` VALUES ('0002', '0001', 40.0); INSERT INTO `score` VALUES ('0002', '0002', 30.0); INSERT INTO `score` VALUES ('0002', '0003', 99.0); INSERT INTO `score` VALUES ('0003', '0001', 70.0); INSERT INTO `score` VALUES ('0003', '0002', 77.0); INSERT INTO `score` VALUES ('0003', '0003', 60.0); SET FOREIGN_KEY_CHECKS = 1;
2、效果圖說明,第一列用戶信息stu_no,第二列課程號course_no,第三列課程成績
stu_no | 語文 | 數(shù)學(xué) | 英語 |
---|---|---|---|
0001 | 40.0 | 50.0 | 48.0 |
0002 | 40.0 | 30.0 | 99.0 |
0003 | 70.0 | 77.0 | 60.0 |
3、實現(xiàn)SQL
select stu_no, sum(IF(course_no = '0001', score_prize, 0)) as '語文', sum(IF(course_no = '0002', score_prize, 0)) as '數(shù)學(xué)', sum(IF(course_no = '0003', score_prize, 0)) as '英語' from score group by stu_no;
場景2:列轉(zhuǎn)換行
1、準(zhǔn)備數(shù)據(jù)表結(jié)構(gòu)和數(shù)據(jù)
/* Navicat Premium Data Transfer Source Server : 本地 Source Server Type : MySQL Source Server Version : 80027 Source Host : localhost:3306 Source Schema : school Target Server Type : MySQL Target Server Version : 80027 File Encoding : 65001 Date: 13/06/2024 14:54:37 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for cjs -- ---------------------------- DROP TABLE IF EXISTS `cjs`; CREATE TABLE `cjs` ( `name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `chinese` int NULL DEFAULT NULL, `math` int NULL DEFAULT NULL, `phy` int NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of cjs -- ---------------------------- INSERT INTO `cjs` VALUES ('張三', 89, 90, 79); INSERT INTO `cjs` VALUES ('李四', 88, 79, 90); SET FOREIGN_KEY_CHECKS = 1;
2、效果圖
name | course |
---|---|
張三 | 90 |
張三 | 89 |
張三 | 79 |
李四 | 79 |
李四 | 88 |
李四 | 90 |
3、業(yè)務(wù)代碼
select * from ( select name, math as course from cjs union all select name, chinese as course from cjs union all select name, phy as course from cjs ) t order by t.name;
到此這篇關(guān)于MySQL行列互換的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)MySQL行列互換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL啟動報錯:Can not connect to MySQL
今天打開數(shù)據(jù)庫出現(xiàn)一個錯誤,ERROR 2003: Can't connect to MySQL server on 'localhost' 的錯誤,網(wǎng)上查找原因說是我的mysql服務(wù)沒有打開,所以本文給大家介紹了MySQL啟動報錯:Can not connect to MySQL server的解決方法,需要的朋友可以參考下2024-03-03MySQL需要根據(jù)特定順序排序的實現(xiàn)方法
在MySQL中,我們可以通過指定順序排序來在查詢結(jié)果中控制數(shù)據(jù)的排列順序,這種排序方式是非常有用的,本文就來介紹一下,感興趣的可以了解一下2023-11-11mysql基礎(chǔ)架構(gòu)教程之查詢語句執(zhí)行的流程詳解
這篇文章主要給大家介紹了關(guān)于mysql基礎(chǔ)架構(gòu)教程之查詢語句執(zhí)行流程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧2018-11-11mysql實現(xiàn)按照某個時間段分組統(tǒng)計
這篇文章主要介紹了mysql實現(xiàn)按照某個時間段分組統(tǒng)計方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10