博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL面试题之行列转换
阅读量:2505 次
发布时间:2019-05-11

本文共 1687 字,大约阅读时间需要 5 分钟。

  • 情况一,如何行转列

建表语句:

SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for tb-- ----------------------------DROP TABLE IF EXISTS `tb`;CREATE TABLE `tb` (  `姓名` varchar(10) DEFAULT NULL,  `课程` varchar(10) DEFAULT NULL,  `分数` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of tb-- ----------------------------INSERT INTO `tb` VALUES ('李四', '物理', '22');INSERT INTO `tb` VALUES ('李四', '数学', '53');INSERT INTO `tb` VALUES ('张三', '物理', '35');INSERT INTO `tb` VALUES ('李四', '语文', '52');INSERT INTO `tb` VALUES ('张三', '语文', '52')

表结构如下:

这里写图片描述
实现如下效果:
这里写图片描述

查询语句如下:

SELECT    姓名,    max(        CASE        WHEN 课程 = '语文' THEN            分数        ELSE            0        END    ) 语文,    max(        CASE        WHEN 课程 = '数学' THEN            分数        ELSE            0        END    ) 数学,    max(        CASE        WHEN 课程 = '物理' THEN            分数        ELSE            0        END    ) 物理FROM    tbGROUP BY    姓名;
  • 情况一,如何列转行

建表语句:

DROP TABLE IF EXISTS `tb2`;CREATE TABLE `tb2` (  `姓名` varchar(10) DEFAULT NULL,  `语文` int(11) DEFAULT NULL,  `数学` int(11) DEFAULT NULL,  `物理` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of tb2-- ----------------------------INSERT INTO `tb2` VALUES ('张三', '21', '212', '111');INSERT INTO `tb2` VALUES ('李四', '2', '212', '2');

表结构如下:

表结构
实现如下效果:
这里写图片描述

查询语句:

SELECT    姓名,    '语文' AS 课程,    语文 AS 分数FROM    tb2UNION ALL    SELECT        姓名,        '数学' AS 课程,        数学 AS 分数    FROM        tb2    UNION ALL        SELECT            姓名,            '物理' AS 课程,            物理 AS 分数        FROM            tb2

总结:以上在实际开发应用中使用不是很好,在这只是做个记录,个人觉得实际开发中在业务中实现行列转换。

你可能感兴趣的文章
CentOS7 重置root密码
查看>>
Centos安装Python3
查看>>
PHP批量插入
查看>>
laravel连接sql server 2008
查看>>
Laravel框架学习笔记之任务调度(定时任务)
查看>>
laravel 定时任务秒级执行
查看>>
浅析 Laravel 官方文档推荐的 Nginx 配置
查看>>
Swagger在Laravel项目中的使用
查看>>
Laravel 的生命周期
查看>>
CentOS Docker 安装
查看>>
Nginx
查看>>
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Mysql出现Table 'performance_schema.session_status' doesn't exist
查看>>
MySQL innert join、left join、right join等理解
查看>>
sdc时序约束
查看>>
NoC片上网络
查看>>
开源SoC整理
查看>>
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>