日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁(yè) mysql 正文

MySQL日常問題-行列互換

作者:geekmice 更新時(shí)間: 2024-07-15 mysql

問題 行列互換

場(chǎng)景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é)號(hào)',
  `course_no` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '課程號(hào)',
  `score_prize` decimal(4, 1) NULL DEFAULT NULL COMMENT '成績(jī)',
  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,第二列課程號(hào)course_no,第三列課程成績(jī)
在這里插入圖片描述

stu_no 語(yǔ)文 數(shù)學(xué) 英語(yǔ)
0001 40.0 50.0 48.0
0002 40.0 30.0 99.0
0003 70.0 77.0 60.0

3、實(shí)現(xiàn)SQL

select stu_no,
       sum(IF(course_no = '0001', score_prize, 0)) as '語(yǔ)文',
       sum(IF(course_no = '0002', score_prize, 0)) as '數(shù)學(xué)',
       sum(IF(course_no = '0003', score_prize, 0)) as '英語(yǔ)'
from score
group by stu_no;

場(chǎng)景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;

原文鏈接:https://blog.csdn.net/greek7777/article/details/139654295

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新