myql数据库,sql横排转竖排以及竖排转横排,oracle的over函数的使用
一、引言
前些日子遇到了一个sql语句的横排转竖排以及竖排转横排的问题,现在该总结一下,具体问题如下:
这里的第二题和第三题和下面所讲述的学生的成绩表是相同的,这里给大家留一下一个念想,大家可以自己做做上面的笔试题。
我主要针对的是第二题和第三题来做讲解,第一题相信大家都会做,这里就不赘述了,直接进入正题!
二、问题详解
1、我们先来说说第二题,
(1)首先我们先创建一个表,用实际来说话,新建一个tb表,
DROP TABLE tb;
CREATE TABLE tb(
name varchar(10),
subject VARCHAR(10),
score NUMERIC
);
INSERT INTO tb(name,SUBJECT,score) VALUES('张三','语文',74);
INSERT INTO tb(name,SUBJECT,score) VALUES('张三','数学',83);
insert into tb(Name , Subject , score) values('张三' ,'物理' , 93);
insert into tb(Name , Subject , score) values('李四' , '语文' , 74);
insert into tb(Name , Subject , score) values('李四' , '数学' , 84);
insert into tb(Name , Subject , score) values('李四' , '物理' , 94); SELECT * FROM tb;
(2)最初的查询结果如图所示

(3)下面我们开始竖排转横排
SELECT NAME 姓名,
MAX(CASE SUBJECT WHEN '语文' THEN score ELSE 0 END) 语文,
MAX(CASE SUBJECT WHEN '数学' THEN score ELSE 0 END) 数学,
MAX(CASE SUBJECT WHEN '物理' THEN score ELSE 0 END) 物理
FROM tb GROUP BY NAME
结果是:
(4)进一步的拓展,假如我们想要的结果为下图

SELECT NAME 姓名,
MAX(CASE SUBJECT WHEN '语文' THEN score ELSE 0 END) 语文,
MAX(CASE SUBJECT WHEN '数学' THEN score ELSE 0 END) 数学,
MAX(CASE SUBJECT WHEN '物理' THEN score ELSE 0 END) 物理,
SUM(score) AS 总分,
AVG(score) AS 平均分
FROM tb GROUP BY NAME
2、下面来讨论一下横排转竖排的问题
(1)首先创建表tb1,
CREATE TABLE tb1(
姓名 VARCHAR(10),
语文 NUMERIC,
数学 NUMERIC,
物理 NUMERIC
);
insert into tb1(姓名 , 语文 , 数学 , 物理) values('张三',74,83,93);
insert into tb1(姓名 , 语文 , 数学 , 物理) values('李四',74,84,94); SELECT * FROM tb1;
如图所示:
(2)横排转竖排
方法一:
select 姓名 as name,'语文' as subject,语文 as score from tb1
union
select 姓名 as name,'数学' as subject,数学 as score from tb1
union
select 姓名 as name,'物理' as subject,物理 as score from tb1
order by name
方法二:
SELECT * FROM (
SELECT 姓名 as NAME,'语文' AS SUBJECT, 语文 AS score from tb1 UNION
SELECT 姓名 AS NAME,'数学' AS SUBJECT , 数学 AS score from tb1 UNION
SELECT 姓名 AS NAME,'物理' AS SUBJECT, 物理 AS score FROM tb1
)t ORDER BY NAME
结果为:
3、下面讨论一下第三题
(1)创建表tb2
CREATE TABLE tb2(
YEAR NUMBER,
salary NUMBER
);
INSERT INTO tb2(YEAR,salary) VALUES(2000,1000);
INSERT INTO tb2(YEAR,salary) VALUES(2001,2000);
INSERT INTO tb2(YEAR,salary) VALUES(2002,3000);
INSERT INTO tb2(YEAR,salary) VALUES(2003,4000);
SELECT * FROM tb2;
如图:
(2)利用over函数完成所需要求,
select year,sum(salary) over(order by salary) from tb2
考察开窗函数的,
想看更多over开窗函数可以查看这篇博客:http://blog.csdn.net/moshansk/article/details/52451455
myql数据库,sql横排转竖排以及竖排转横排,oracle的over函数的使用的更多相关文章
- 织梦仿站列表页pagelist分页显示竖排,如何修改成横排?
织梦仿站列表页pagelist分页显示竖排,如何修改成横排? 织梦列表页的分页标签是采用pagelist来进行调用的,但是很多人在调用之后会出现一个列表竖着排列的问题(横排美观度好一些),还是非常不美 ...
- Oracle 数据库SQL性能查看
作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看 ...
- Oracle数据库--SQL
1.事务(Transaction ) 1)命名事务 set transaction name ‘transaction_name ’; 2)查看事务是否存在 select name from v$tr ...
- 你用什么方法检查 PHP 脚本的执行效率(通常是脚本执行时间)和数据库 SQL 的效率(通常是数据库 Query 时间), 并定位和分析脚本执行和数据库查询的瓶颈所在?
php: 一般是在你要检查的代码开头记录一个时间,结尾记录一个时间.取差值, 数据库SQL的效率 sql的explain(mysql),启用slow query log记录慢查询. 通常还要 ...
- db2数据库sql报错信息
sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 ...
- 数据库SQL Server与C#中数据类型的对应关系
ylbtech- .NET-Basic:数据库SQL Server与C#中数据类型的对应关系 数据库SQL SServer与C#中数据类型的对应关系 1.A,返回顶部 数据库 C#程序 int int ...
- 数据库 SQL语句优化
温馨提示:本篇内容均来自网上,本人只做了稍微处理,未进行细致研究,仅当做以后不备之需,如若你喜欢可尽情转走. 一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图 ...
- 我的mysql数据库sql优化原则
原文 我的mysql数据库sql优化原则 一.前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待. ...
- 学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)
学生选课数据库SQL语句45道练习题: 一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...
随机推荐
- java 项目时间和服务器时间不一致
今天线上项目关于时间的几个任务都出了问题,查看日志发现日志的时间不对,用的是log4j,日志输出的时间都早了很长时间. 1 首先先登上服务器查看了服务器的系统时间 linux下 date命令 时间正确 ...
- 前端技术之:通过plop生成Controller的方法与步骤
# Controller的生成 开发者可以通过plop命令生成各种类型的控制器类(Normal.Restful.View), 以下是示例生成步骤. 1. 执行以下命令: plop controller ...
- python pytesseract使用
正确使用方法 1.tesseract-orc安装 tesseract-ocr-setup-3.05.00dev.exe下载 2.pytesseract pip install pytesseract ...
- wfi破解
破解wifi步骤 1.准备字典(常见字典 数字组合.常用姓氏.汉字姓名+年份组合等等) 2.无线网卡 3.查看附近WiFi信息 前言 : 随着无线网络走进我们的生活,在方便了我们的同时又产生了许多的安 ...
- CVE-2019-0708复现之旅
CVE-2019-0708 0x00 前言: CVE-2019-0708漏洞已经出来三四个月了对应的poc也出现了很久 ,exp 还是没动静前段时间出了个蓝屏伪exp 不过肯定那些大厂手里早已经了有了 ...
- 赤壁情:dp
首先这道题用到的3个新关键字大概讲一下: (我刚学会仅仅会瞎搞做题,欢迎大神补充) static:声明一个变量并清空.(不知道用不用时间,求解答) 具体用法:static 变量类型 变量名.如:sta ...
- jquery判断手指滑动方向
jquery判断手指滑动方向 <pre> /*判断哪个滑动方向还是自己改下 要么上下 要么左右*/ var startX; var startY; $(".shanghua&qu ...
- django 之创建自己的模板(使用案例)
Django 创建自己的模板篇(实例) 此处需要创建模板,主要是对自己的模板进行扩展: 一般是扩展模板的tag和filter两个功能.可以用来创建你自己的tag和filter功能库. 创建模板库 分为 ...
- 【R语言学习笔记】 Day1 CART 逻辑回归、分类树以及随机森林的应用及对比
1. 目的:根据人口普查数据来预测收入(预测每个个体年收入是否超过$50,000) 2. 数据来源:1994年美国人口普查数据,数据中共含31978个观测值,每个观测值代表一个个体 3. 变量介绍: ...
- 网站搭建 - Linux虚拟系统 - 时间设置 - root密码修改 - 建站
先试一下,如果不成的话,就不发表了. 下载织梦: 额,这个先还是不要下了. Linux是Apache + MySQL + PHP的套路,先下载吧,不摆图了,直接摆命令,我的是虚拟机,可能没有那么顺利. ...