Oracle笔试题练习_oracle主键 地区 邮编 楼栋 教室 1 广州 510000 7 118_风子~的博客-程序员宅基地

技术标签: oracle  数据库  sql  plsql  

目录

 

一、查询

1、学生表成绩查询

2、查询客户费用记录

3、年月转季度练习

4、行列转换练习(case when/union all)

5、组合分析函数练习

6、union all 练习

7、同比环比的练习(位移函数)

8、组合分析函数练习


一、查询

1、学生表成绩查询

 

建表插入数据:

create table SCORE_fengzi
(
  cname   VARCHAR2(10),
  sciense VARCHAR2(10),
  score   NUMBER(5)
)

这句话可以用plsql编辑表数据:

SELECT  * FROM SCORE_fengzi FOR UPDATE;

1)用一条SQL查出所有学科分数都大于80分的学生姓名。(找每个人最低一门功课的成绩大于80即可)

--这个是查询每门大于80的数据得出的
select cname,count(1) from score_fengzi 
where score > 80
group by cname
having count(1) > 1
select cname from score_fengzi
group by cname
having min(score) > 80

2)用一条SQL查出每门学科都高于该学科平均分的学生姓名。(先查询学科平均分,再用left join 连表查询)

select cname from score_fengzi s1
left join 
(select sciense, avg(score) avs  from score_fengzi
group by sciense) s2
on s1.sciense = s2.sciense 
where s1.score > s2.avs
group by s1.cname
having count(1) = (select count(distinct(sciense)) from score_fengzi)

3)用一条SQL查出如下的结果:

select cname as "姓名",
sum(case when sciense = '语文' then score end ) as "语文",
sum(case when sciense = '数学' then score end ) as "数学"
from score_fengzi
group by cname
order by cname

2、查询客户费用记录

1)有一个电话客户费用记录的表
TB_CHARGE(SERV_ID,ACCT_ITEM,CHARGE, REC_DATE),四个字段分别是用户ID,账目项,金额和消费日期,示例数据如表1所示,请用SQL语句做成如表2所示的结果

参考建表为T:

select serv_ID,
sum(case when ACCT_ITEM = '市内通话费' then charge else 0 end) as "市内通话费",
sum(case when ACCT_ITEM = '省内长途费' then charge else 0 end) as "省内通话费",
sum(case when ACCT_ITEM = '国内长途费' then charge else 0 end) as "国内通话费"
from T
group by serv_ID

3、年月转季度练习

1)左表Sales表是每个月的销量总额,用SQL表达出:统计每个季度的销量总额,如右表所示:

select substr(months,1,4)||'Q'||to_char(to_date(months,'yyyymm'),'Q') as season, sum(sell) as sell from sales
group by substr(months,1,4)||'Q'||to_char(to_date(months,'yyyymm'),'Q')

注释:

  • 用拼接的方法先得出season
  • SUBSTR(X,START,N) 字符截取函数 把字符X从START开始截取N位,如果N省掉,默认截取到最后一位
  • 数据类型转换函数

TO_NUMBER()

to_char()

to_date()

4、行列转换练习(case when/union all)

1)case when/union all .练习

  • 一开始只会横着的表:
select 
sum(case when age < 10 then cnt end ) as "[0,10)",
sum(case when age >= 10 and age <20 then cnt end ) as "[10,20)",
sum(case when age >=20 and age <30 then cnt end ) as "[20,30)",  
sum(case when age >=30 then cnt end ) as "30以上"
from test_fengzi

 

 

  • 竖着的表用union all 连接
select '[0,10)' as age, sum(cnt) as cnt from test_fengzi where age between 0 and 9
union all
select '[10,20)' as age, sum(cnt) as cnt from test_fengzi where age between 10 and 19
union all
select '[20,30)' as age, sum(cnt) as cnt from test_fengzi where age between 20 and 29
union all
select '30以上' as age, sum(cnt) as cnt from test_fengzi where age>=30

2)case when 练习

select cus_id,sum(case when  acc_type = 'Checking' then acc_no end) checkingaccount,
sum(case when  acc_type = 'saving' then acc_no end) savingaccount
from accounts
group by cus_id

5、组合分析函数练习

select date_id,daliy_out,sum(daliy_out)over(order by daliy_out desc)  from pro 
group by date_id,daliy_out
order by date_id

6、union all 练习

主键 地区 邮编 楼栋 教室
1 广州 510000 7 118


转换为


Name value
主键 1
地区 广州
邮编 510000
楼栋 7
教室 118

select 'primaryy' name,to_char(primaryy) value from wx
union all
select 'district' name,to_char(district) value from wx
union all
select 'postcode' name,to_char(postcode) value from wx
union all
select 'address' name,to_char(address) value from wx
union all
select 'class' name,to_char(class) value from wx

7、同比环比的练习(位移函数)

1)现有一张销量表SALE02,数据如左表所示。要求写出SQL语句,完成建一个视图V_SALE,求销量的去年同比和上月环比,如右表所示:

  • 同比是指与上一统计年度的同期进行对比;
  • 环比是指与上一统计周期进行对比。
select months,sell,lag(sell,12)over(order by months) lastyear,
lag(sell,1)over(order by months) lastmonth from sell02

  • 求同比和环比
select s.months,s.sell,s.sell/a.lastyear  tt, s.sell/a.lastmonth hh from sell02 s,
(select months,sell,lag(sell,12)over(order by months) lastyear,
lag(sell,1)over(order by months) lastmonth from sell02)a
where s.months = a.months

select s.months,s.sell,round(s.sell/a.lastyear*100 )|| '%' tt, s.sell/a.lastmonth hh from sell02 s,
(select months,sell,lag(sell,12)over(order by months) lastyear,
lag(sell,1)over(order by months) lastmonth from sell02)a
where s.months = a.months

  • 同比、环比用百分号显示,但是我目前没找到更好的办法让有数据的字段显示%,目前做成的了没有数据的也有了%,后期再查资料看吧。

8、组合分析函数练习

1)求EMP表中每个部门工资高于部门平均工资超过2人的员工数量占整个部门人数的百分比(题目意思是例如部门A总人数为10,超过部门平均工资的人数是6,则6/10)

  1. 先分别计算部门的平均工资和部门总人数
  2. 再计算超过部门平均工资有两个人以上的部门人数
--1、先分别计算部门的平均工资和部门总人数

select e.* ,AVG(SAL)OVER(PARTITION BY DEPTNO) avgsal,
 count(1) over( partition by deptno ) tt from emp e

 

--再计算超过部门平均工资有两个人以上的部门人数

select b.deptno, sum(case when b.sal > a.avgsal then 1 else 0 end)/a.tt ss from emp b,
(select e.* ,AVG(SAL)OVER(PARTITION BY DEPTNO) avgsal,
 count(1) over( partition by deptno ) tt from emp e) a
where b.empno = a.empno
and a.tt > 2
group by b.deptno,a.tt

9、有球队a、b、c、d四个队,两两组队比赛的情况有多少种

 

建表:

create table department_fengzi (dname varchar2(5));


select * from department_fengzi;

insert into department_fengzi values ('a');
insert into department_fengzi values ('b');
insert into department_fengzi values ('c');
insert into department_fengzi values ('d');
select s.d1||s.d2 from
(select a.dname d1,b.dname d2 from department_fengzi a,department_fengzi b
where a.dname < b.dname) s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42020750/article/details/108220437

智能推荐

Android 客户端 okhttp3 与服务器之间的双向验证_weixin_33782386的博客-程序员宅基地

【原文】https://blog.csdn.net/leng_wen_rou/article/details/58596142 本篇是Android 客户端基于okhttp3的网络框架 和后台服务器之间的双向验证 分为三个阶段一:简单的后台服务器搭建二:客户端接入okhttp3,并进行的网络请求三:服务器和客户端的双向验证 第一步: 搭建简单的服务器 1:下载tomc..._android okhttp 双向认证

2021年R1快开门式压力容器操作报名考试及R1快开门式压力容器操作最新解析_操作人员在操作压力容器时-程序员宅基地

题库来源:安全生产模拟考试一点通公众号小程序安全生产模拟考试一点通:R1快开门式压力容器操作报名考试参考答案及R1快开门式压力容器操作考试试题解析是安全生产模拟考试一点通题库老师及R1快开门式压力容器操作操作证已考过的学员汇总,相对有效帮助R1快开门式压力容器操作最新解析学员顺利通过考试。1、【多选题】《中华人民共和国特种设备安全法》第八十三条规定,特种设备使用单位使用特种设备未按照规定办理使用登记的,责令限期改正;逾期未改正的,责令停止使用有关特种设备,处()以上()以下罚款。( BC )A、二_操作人员在操作压力容器时

Hibernate 自动生成表问题_雅静8的博客-程序员宅基地

在hibernate4.2.4中使用MySQLInnoDBDialect方言和hibernate.hbm2ddl.auto为update自动生成表时报错,我的 mysql版本为5.5,报错如下:二月 16, 2017 5:33:28 下午 org.hibernate.annotations.common.Version INFO: HCANN000001: Hibernate Co

解决 singleTask onActivityResult() 无效的问题_singletask无效_u010746364的博客-程序员宅基地

在 Android 4.X 系统上,如果你将一个 Activity A 的 launchMode 设置为 singleTask 或 singleInstance ,那么当你在 A 中调用startActivityForResult() 的时候,是不会像你想象的那样,在onActivityResult() 中获得你想要的返回结果的,就像官方文档说的那样:For example, if the a_singletask无效

[TButton]运行时动态创建和删除按钮_lzcx的博客-程序员宅基地

新开一个project,然后拖两个Button放在窗体上代码如下:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) btnAddButt

随便推点

二分求幂 - A^B(王道*)_aabb7654321的博客-程序员宅基地

题目描述:求A^B的最后三位数表示的整数,说明:A^B的含义是“A的B次方”输入:输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0,B=0,则表示输入数据的结束,不做处理。输出:对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行(既然只求最后的三位数,那就没必要整个数字都求...

php nginx gettext,php nginx window系统 gettext方式实现UTF-8国际化多语言(i18n)_zhu hao的博客-程序员宅基地

开始应用:步骤一:搭建环境(服务器已经完成,环境已经搭建好了)1、首先查看你的php扩展目录下是否有php_gettext.dll这个文件,如果没有,这就需要你下载一个或是从其他地方拷贝一个,然后放到php扩展目录。2、打开php.ini,查找”;extension=php_gettext.dll“,然后去除注释,重启nginx。若一切顺利,就可以在 phpinfo() 中看到 gettext ..._18mo.tw下载地址

redis单机和集群安装_192.168.25.153:7002>怎么返回上一层_xiawang1995的博客-程序员宅基地

1.redis单机版安装Redis是c语言开发的。安装redis需要c语言的编译环境。如果没有gcc需要在线安装。yum install gcc-c++安装步骤:第一步:redis的源码包上传到linux系统。第二步:解压缩redis。第三步:编译。进入redis源码目录。make 第四步:安装。make install PREFIX=/usr/local/redis //选择安装路径PREFIX..._192.168.25.153:7002>怎么返回上一层

全方位理解Android权限之底层实现概览-程序员宅基地

0000这个阶段搞了很多和Android文件权限相关的问题,虽然一知半解,但也算是对Android权限机制有一些自己的理解。遂将这些内容整理出来。因为权限这部分涉及到的内容很多,故将知识分为几块内容分别去整理。目前能想到的概要如下:Android 权限底层实现原理概述Android uid,gid的生成与权限机制的联系Android packageManagerService与权限的千丝..._android gid="loop_radio" csdn

什么叫三元表达式_condition and expr1 or expr2_songyh19的博客-程序员宅基地

这里是引用什么叫三元表达式呢?三元运算,顾名思义会有三个要素表达式的大致组成为condition ? expr1 : expr2;一个语句加两个表达式。问号之前为判断语句。如果为真,则执行第一个表达式,如果为假,则执行第二个表达式**如果取值 床垫附加费 是空的 则赋值为0 (注:BigDecimal 是床垫附加费的类型 BigDecimal的方法 不止有BigDecimal.ZERO 还有很多BigDecimal.ONE BigDecimal.TEN 等等)问号之前为判断语句。如果为真._condition and expr1 or expr2

推荐文章

热门文章

相关标签