已知一个表的结构为:
-------------------
姓名 科目 成绩
张三 语文 20
张三 数学 30
张三 英语 50
李四 语文 70
李四 数学 60
李四 英语 90
 
怎样通过select语句把他变成以下结构:
------------------------------------
姓名 语文成绩 数学成绩 英语成绩
张三      20          30          50
李四      70          60          90
 
insert into student values('李四','英语','90')
select * from student
----法一: 正解如下:
select A.姓名,A.成绩as语文成绩,B.成绩as数学成绩,C.成绩as英语成绩
from student A,student B,student C
where A.姓名=B.姓名and B.姓名=C.姓名
and A.科目='语文' and B.科目='数学' and C.科目='英语'
 
--------理解如下:
select *
from student A,student B,student C
--将三个相同的student表相互连接,连接生成6*6*6=216条记录,因为每个表中有6条记录。
where A.姓名=B.姓名and B.姓名=C.姓名
--对连接表记录进行筛选;得到(3*3*3)+(3*3*3)=27+27=54条记录。
and A.科目='语文' and B.科目='数学' and C.科目='英语'
--同时筛选三个子表中的科目内容,执行可得如下。
姓名   科目  成绩   姓名   科目   成绩   姓名   科目   成绩
张三   语文    20     张三   数学      30     张三   英语    50       
李四   语文    70     李四   数学      60     李四   英语    90       
再在select中定义一下输出即可。
 
 
----法二:正解如下
select姓名,
sum(case科目when '语文' then 成绩else 0 end) as 语文成绩,
sum(case科目when '数学' then 成绩else 0 end) as 数学成绩,
sum(case科目when '英语' then 成绩else 0 end) as 英语成绩,
avg(成绩) as 平均成绩,sum(成绩) as 总成绩
from student
group by 姓名
order by 姓名desc
 
结果如下:
姓名 语文成绩 数学成绩 英语成绩 平均成绩 总成绩
张三      20          30          50          33         100
李四      70          60          90          73          220
 

(2)

create table A
(
year int,
Quarter varchar(30),
amount float
)
insert A select 2000,'1',1.1
insert A select 2000,'2',1.2
insert A select 2000,'3',1.3
insert A select 2000,'4',1.4
insert A select 2001,'1',2.1
insert A select 2001,'2',2.2
insert A select 2001,'3',2.3
insert A select 2001,'4',2.4
表A定义如下:
属性类型
Year Integer
Quarter Varchar(30)
Amount float

Year Quarter Amount
2000 1 1.1
2000 2 1.2
2000 3 1.3
2000 4 1.4
2001 1 2.1
2001 2 2.2
2001 3 2.3
2001 4 2.4
其中每行表表示一个季度的数据。

如果处理表A中的数据,得到如下的结果。
Year Quarter1 Quarter2 Quarter3 Quarter4
2000   1.1      1.2     1.3     1.4
2001   2.1      2.2     2.3     2.4
请用SQL写一段代码实现。

 
---法一:正解如下:
select T1.YEAR,T1.amount as Quarter1,T2.amount as Quarter2,T3.amount as Quarter3,T4.amount as Quarter4
from A T1,A T2,A T3,A T4
WHERE T1.YEAR=T2.YEAR AND T2.YEAR=T3.YEAR AND T3.YEAR=T4.YEAR
AND T1.Quarter='1' and T2.Quarter='2' and T3.Quarter='3' and T4.Quarter='4'
 
---法二:正解如下:
select year,
sum(case Quarter when '1' then Amount else 0 end) as Quarter1,
sum(case Quarter when '2' then Amount else 0 end) as Quarter2,
sum(case Quarter when '3' then Amount else 0 end) as Quarter3,
sum(case Quarter when '4' then Amount else 0 end) as Quarter4,
sum(Amount) as ALLAmount
from A
group by year
order by year

第二题:

有一张老师表T(T_ID,T_NAME);
有一张学生表S(S_ID,S_NAME);
有一张班级表C(T_ID,S_ID,C_NAME),
其中C_NAME的取值只有‘大班’和‘小班’,
请查询出符合条件的老师的名字,条件是老师在大班中带的学生数大于此老师在小班中带的学生数。
(最好用子查询吧,题目是这么要求的,另数据库用的是SQL Server)
 
select *
from T,
(select count(*) as x,T_ID from C where c_name='小班' group by T_ID) a,
(select count(*) as x,T_ID from C where c_name='大班' group by T_ID) b
where b.x >a.x and a.T_ID=b.T_ID and T.T_ID=b.T_ID
 

第三题   某个公司的面试题,题目如下:
 
1、找出哪些工资高于他们所在部门的平均工资的员工;
--------------------------------------------------
select A.*
from工资表a join(select部门代码,AVG(工资)as平均工资from工资表group by 部门代码)B
on a.部门代码=B.部门代码
where a.工资>B.平均工资
 
 
2、找出哪些工资高于他们所在部门的manager(经理)的工资的员工;
--------------------------------------------------------------
select A.*
from工资表a join (select * from 工资表where职务=经理)B
on a.部门代码=B.部门代码
where a.工资>B.工资

Select 多个表并且相关联转置的更多相关文章

  1. EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载

    之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...

  2. 创建Hive/hbase相关联的表异常

    hive> CREATE TABLE hperson(id string, name string,email string) STORED BY 'org.apache.hadoop.hive ...

  3. mybatis中表与表之间的关联

    第三天 1.mybatis处理表与表之间的关系? 比如要在帖子回复表里显示其它两张相关联表的信息. 处理的第一种方式: 1)主要的数据实体类是ReplyInfo,相关联的实体表的数据是TitleInf ...

  4. 利用数据库触发器让字段与自增长Id相关联

    十年河东,十年河西,莫欺少年穷 学无止境,精益求精 今天是数据库脚本类的代码,所以不想过多阐述 如下数据表: create table Card( Id ,) primary key, CardNo ...

  5. mysql 常用命令 | 表间 弱关联 join

    show databases; use mhxy; select database(); show tables; desc account_list_175; ),(); select from_u ...

  6. MySQL创表--分页--自关联--

    创建表book create table t_book( id int unsigned auto_increment primary key, bookName varchar(255) defau ...

  7. Entity Framework 6 Recipes 2nd Edition(12-5)译 -> 自动删除相关联实体

    12-5. 自动删除相关联实体 问题 当一个实体被删除时,你想自动删除它相关联的实体 解决方案 假设你有一个表结构由一个course (科目), course 的classes (课程),以及enro ...

  8. code first提示已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭解决方法

    使用codefirst查询当然是必不可少的,但有时不小心可能很简单的查询也会导致异常. 下面用codefirst做个示例简单演示下异常发生的场景: var attendlist = db.Databa ...

  9. ASP.NET连接数据库时,提示“用户 'sa' 登录失败原因: 未与信任 SQL Server 连接相关联

    用ASP.NET连接数据库时,提示"用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联.".解决方法:首先检查是不是web.config文件内的用户名密码 ...

随机推荐

  1. neo4j︱与python结合的py2neo使用教程

    —- 目前的几篇相关:—– neo4j︱图数据库基本概念.操作罗列与整理(一) neo4j︱Cypher 查询语言简单案例(二) neo4j︱Cypher完整案例csv导入.关系联通.高级查询(三) ...

  2. vue-cli3项目首页加载速度优化(cdn加速,路由懒加载,gzip压缩)

    今天打算上线vue的单页面项目,上线后,首页加载速度巨慢! 原因是项目上线后,网速不够快,加载js,css等资源很慢, 打开打包好的文件发现chunk-vendors.xxxxxxx.js的包很大,达 ...

  3. 0078 Java与MySQL时间戳传递/存储/协调问题--userLegacyDatetimeCode--userTimezone--serverTimezone

    00. 基本问题 0.0 版本: 驱动5.1.47和8.0.17 0.1 MySQL驱动5.1有userLegacyDatetimeCode和userTimezone两个参数, 8.0没有 0.2 J ...

  4. dubbo中的group与version的存在意义

    公司每周五都要给线上系统发布一个版本,我将本周新开发的业务模块直接提交到svn的主干上(当然本机已经测试通过),在公司的测试环境部署运行正常,测试人员业务测试通过.但是在部署到准生产环境上后出现了意想 ...

  5. ANDROID_ID

    在设备首次启动时,系统会随机生成一个64位的数字,并把这个数字以16进制字符串的形式保存下来,这个16进制的字符串就是ANDROID_ID,当设备被wipe后该值会被重置.可以通过下面的方法获取: i ...

  6. Leetcode题目98.验证二叉搜索树(递归-中等)

    题目描述: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数.节点的右子树只包含大于当前节点的数.所有左子树和右子树自身必须也是 ...

  7. 机器学习朴素贝叶斯 SVC对新闻文本进行分类

    朴素贝叶斯分类器模型(Naive Bayles) Model basic introduction: 朴素贝叶斯分类器是通过数学家贝叶斯的贝叶斯理论构造的,下面先简单介绍贝叶斯的几个公式: 先验概率: ...

  8. arcgis python 判断是数据库或是文件夹

    import arcpy # Create a Describe object # desc = arcpy.Describe("C:/Data/chesapeake.gdb") ...

  9. uni-app 的更新及碰到的问题

    uni-app 的更新 我这个是针对 app 的测试,没有考虑 小程序 及 h5,如需考虑请参考 uni-app 的条件编译 当我们将文件打包好之后,我们在手机上就可以下载 apk 文件,安装到我们的 ...

  10. centos7 开启80端口

    关闭与开启防火墙 systemctl stop firewalld.servicesystemctl start firewalld.service 先查看防火墙是否开启的状态,以及开放端口的情况:s ...