一、引言

  前些日子遇到了一个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函数的使用的更多相关文章

  1. 织梦仿站列表页pagelist分页显示竖排,如何修改成横排?

    织梦仿站列表页pagelist分页显示竖排,如何修改成横排? 织梦列表页的分页标签是采用pagelist来进行调用的,但是很多人在调用之后会出现一个列表竖着排列的问题(横排美观度好一些),还是非常不美 ...

  2. Oracle 数据库SQL性能查看

    作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看 ...

  3. Oracle数据库--SQL

    1.事务(Transaction ) 1)命名事务 set transaction name ‘transaction_name ’; 2)查看事务是否存在 select name from v$tr ...

  4. 你用什么方法检查 PHP 脚本的执行效率(通常是脚本执行时间)和数据库 SQL 的效率(通常是数据库 Query 时间), 并定位和分析脚本执行和数据库查询的瓶颈所在?

    php: 一般是在你要检查的代码开头记录一个时间,结尾记录一个时间.取差值, 数据库SQL的效率    sql的explain(mysql),启用slow query log记录慢查询.   通常还要 ...

  5. db2数据库sql报错信息

    sqlcode sqlstate 说明 000 00000 SQL语句成功完成   01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 ...

  6. 数据库SQL Server与C#中数据类型的对应关系

    ylbtech- .NET-Basic:数据库SQL Server与C#中数据类型的对应关系 数据库SQL SServer与C#中数据类型的对应关系 1.A,返回顶部 数据库 C#程序 int int ...

  7. 数据库 SQL语句优化

    温馨提示:本篇内容均来自网上,本人只做了稍微处理,未进行细致研究,仅当做以后不备之需,如若你喜欢可尽情转走. 一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图 ...

  8. 我的mysql数据库sql优化原则

    原文 我的mysql数据库sql优化原则 一.前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待. ...

  9. 学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)

    学生选课数据库SQL语句45道练习题: 一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...

随机推荐

  1. C++:类中创建线程

    #include <iostream> #include <stdio.h> #include <stdlib.h> #include <iostream&g ...

  2. 使用position设置经典的网站前端结构

    能脱离文档流的设置: float:left/right position:absolute; 绝对定位 position:fixed; 固定定位 //搞清楚position的属性值的意思就容易明白 使 ...

  3. docker基本操作教程

    镜像操作 获取镜像 从Docker Hub搜索镜像: docker search ubuntu 下载镜像: docker pull ubuntu:18.04 若下载镜像速度较慢,更改镜像源: Ubun ...

  4. Docker的centos7容器中如何安装mongodb

    下载安装包: wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.12.tgz 解压安装包 tar -zxvf mongodb ...

  5. go语言版本测试, 一段错误代码引发的血案

    起因: 最近在学习手写docker,看到了一段会编译错误的代码. 过程: 最近在学习docker,看到一段示例代码,每次编译时会报错. 因此, 无法继续下去, 只好在网上搜索解决方案, 用了很多时间, ...

  6. P4799 [CEOI2015 Day2]世界冰球锦标赛(折半暴搜)

    题目很明确,不超过预算的方案数.两个直觉:1.暴搜2.dp 每个点两种状态,选或不选.... 1.可过20% 2.可过70% 正解:折半搜索(meet in the middle) 有点像以前的双向广 ...

  7. day 2 上午 挂饰 背包

    #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> us ...

  8. vue实现tab选项卡切换效果

    tab选项卡切换效果: 通过点击事件传入参数,然后通过v-show来进行切换显示 <template> <div class="box"> <div ...

  9. 简述JMM

    一.很多初学者分不清JMM和JVM的内存模型,本篇只是简要的谈一谈什么是JMM,并不深入探讨. 示意图A: 在多线程操纵共享资源时,并不是对资源本身进行的操作,而是将共享资源的副本复制了一份到自己的私 ...

  10. 使用springcloud开发测试问题总结

    使用springcloud开发测试 如下描述的问题,没有指明是linux部署的,都是在windows开发环境上部署验证发现的. Issue1配置客户端不使用配置中心 问题描述: 配置客户端使用配置中心 ...