MySQL日常问题-行列互换

问题 行列互换

场景1 行转换列

1、表结构和数据

/*
 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 '学号',
  `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 语文 数学 英语
0001 40.0 50.0 48.0
0002 40.0 30.0 99.0
0003 70.0 77.0 60.0

3、实现SQL

select stu_no,
       sum(IF(course_no = '0001', score_prize, 0)) as '语文',
       sum(IF(course_no = '0002', score_prize, 0)) as '数学',
       sum(IF(course_no = '0003', score_prize, 0)) as '英语'
from score
group by stu_no;

场景2:列转换行

1、准备数据表结构和数据

/*
 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、业务代码

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;

相关推荐

  1. mysql问题

    2024-06-18 11:10:01       44 阅读
  2. MySQL Ruler mysql 日常开发规范

    2024-06-18 11:10:01       35 阅读
  3. MysqlMysql8日常优化经验分享

    2024-06-18 11:10:01       30 阅读
  4. 行列视能解决哪些问题

    2024-06-18 11:10:01       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 11:10:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 11:10:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 11:10:01       82 阅读
  4. Python语言-面向对象

    2024-06-18 11:10:01       91 阅读

热门阅读

  1. 在无线网中 2.4G、5G、WiFi6、WiFi7 都是什么意思?

    2024-06-18 11:10:01       35 阅读
  2. Oracle中常用特殊字符chr值

    2024-06-18 11:10:01       31 阅读
  3. 这些常用 MySQL 用法,99% 的人都不知道!

    2024-06-18 11:10:01       33 阅读
  4. 数据仓库之主题域

    2024-06-18 11:10:01       30 阅读
  5. python,ipython 和 jupyter notebook 之间的关系

    2024-06-18 11:10:01       32 阅读
  6. LeetCode //MySQL - 178. Rank Scores

    2024-06-18 11:10:01       37 阅读
  7. new char(20)和new char[20]区别

    2024-06-18 11:10:01       33 阅读
  8. 在mysql中GROUP_CONCAT字段的作用

    2024-06-18 11:10:01       41 阅读
  9. 面试计算机网络八股文十问十答第十期

    2024-06-18 11:10:01       62 阅读