Oracle 上机

--1.(3分)查找每个部门的最高工资员工编号及其下属信息。
select e2.empno,e1.* from emp e1 join (
select * from emp where (deptno,sal) in
(select deptno,max(sal) from emp group by deptno)) e2
on
e1.mgr = e2.empno;

/*
2.(5分)
有成绩表如下(使用with子查询):
准考证号 科目 成绩
2006001 语文 119
2006001 数学 108
2006002 物理 142
2006001 化学 136
2006001 物理 127
2006002 数学 149
2006002 英语 110
2006002 语文 105
2006001 英语 98
2006002 化学 129
……
给出总分在600以上的学生准考证号。*/
with t as (select sid,sum(score) a from stu group by sid)
select sid from t where a > 600;

/*
3.(5分)
新建 stu_dent(学生表),字段:sno,sname,sex,birth,age
要求如下:
1、学号(sno)不能为空且不可重复;
2、名字(sname)不能为空;
3、性别(sex)的值只能是'男'或'女';
4、出生日期(birth)为日期格式;
5、年龄(age)为数值类型且在 0 - 100 之间;*/
create table stu_dent(
       sno char(50) primary key ,
       sname char(20) not null,
       sex char(3) check(sex in ('女','男')),
       birth date,
       age number check(age between 0 and 100)
       );
select * from stu_dent;

4.(5分)/*
某cc表数据如下:
c1    c2
--------------
1     西
1     安
1     的
2     天
2     气
3     好
……
转换为
c3    c4
--------------
1   西安的
2   天气
3   好*/
--要求:不能改变表结构及数据内容,仅在最后通过SELECT显示出这个查询结果
select c1 c3,listagg(c2,'')  within group (order by r) c4
from (select cc.*,rownum r from cc) t group by c1;


/*5.(5分)
X 市建了一个新的体育馆,每日人流量信息被记录在这三列信息中:序号(id)、日期(visit_date)、人流量(people)。
请编写一个查询语句,找出人流量的高峰期。
高峰期时,至少连续三行记录中的人流量不少于100。
例如,表stadium:
+------+------------+-----------+
| id | visit_date | people |
+------+------------+-----------+
| 1 | 2017-01-01 | 10 |
| 2 | 2017-01-02 | 109 |
| 3 | 2017-01-03 | 150 |
| 4 | 2017-01-04 | 99 |
| 5 | 2017-01-05 | 145 |
| 6 | 2017-01-06 | 1455 |
| 7 | 2017-01-07 | 199 |
| 8 | 2017-01-08 | 188 |
+------+------------+-----------+
对于上面的示例数据,输出为:
+------+------------+-----------+
| id | visit_date | people |
+------+------------+-----------+
| 5 | 2017-01-05 | 145 |
| 6 | 2017-01-06 | 1455 |
| 7 | 2017-01-07 | 199 |
| 8 | 2017-01-08 | 188 |
+------+------------+-----------+
提示:
每天只有一行记录,日期随着 id 的增加而增加。*/
with t as 
(select f.*,f.id-row_number()over(order by id) m from f601 f where people > 100)
select t.id,t.visit_date,people from 
t where t.m = (select m from
(select m,count(*) from t
group by m having count(*) >2));

/*
6.(5分)
编写一个 SQL 查询,查找所有至少连续出现三次的数字。
+----+-----+
| Id | Num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1 |
+-----------------+*/
/*create table f602(
       id number,
       numb number
       );*/
/*insert into f602 values(1,1);
insert into f602 values(2,1);
insert into f602 values(3,1);
insert into f602 values(4,2);
insert into f602 values(5,1);
insert into f602 values(6,2);
insert into f602 values(7,2);*/
select * from f602;

select numb from
(select t.*,lead(t.lead1)over(order by t.id) lead2 from
(select f.*,lead(f.numb)over(order by f.id) lead1 from f602 f)t)a
where a.lead1 = a.numb and a.lead1 = a.lead2;


/*7.(5分)
小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。
其中纵列的 id 是连续递增的,小美想改变相邻俩学生的座位。 
你能不能帮她写一个 SQL query 来输出小美想要的结果呢?
示例:
+---------+---------+
| id | student |
+---------+---------+
| 1 | Abbot |
| 2 | Doris |
| 3 | Emerson |
| 4 | Green |
| 5 | Jeames |
+---------+---------+
假如数据输入的是上表,则输出结果如下:
+---------+---------+
| id | student |
+---------+---------+
| 1 | Doris |
| 2 | Abbot |
| 3 | Green |
| 4 | Emerson |
| 5 | Jeames |
+---------+---------+
注意: 
如果学生人数是奇数,则不需要改变最后一个同学的座位。*/

with seat as
(select 1 ,'Abbot' as student from dual
union all
select 2,'Doris' from dual
union all
select 3,'Emerson' from dual
union all
select 4 ,'Green' from dual
union all
select 5 ,'Jeames' from dual
)
select * from seat 
order by 
decode(student,'Doris',1,'Abbot',2,'Green',3,'Emerson',4,'Jeames',5)

/*
8.(7分)
Trips 表中保存所有出租车的行程信息。每段行程有唯一键 Id,Client_Id 和 Driver_Id 是 Users 表中 Users_Id 的外键。
Status 是检查类型,成员只有以下三种 (‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’)。
+----+-----------+-----------+---------+--------------------+----------+
| Id | Client_Id | Driver_Id | City_Id | Status |Request_at|
+----+-----------+-----------+---------+--------------------+----------+
| 1 | 1 | 10 | 1 | completed |2013-10-01|
| 2 | 2 | 11 | 1 | cancelled_by_driver|2013-10-01|
| 3 | 3 | 12 | 6 | completed |2013-10-01|
| 4 | 4 | 13 | 6 | cancelled_by_client|2013-10-01|
| 5 | 1 | 10 | 1 | completed |2013-10-02|
| 6 | 2 | 11 | 6 | completed |2013-10-02|
| 7 | 3 | 12 | 6 | completed |2013-10-02|
| 8 | 2 | 12 | 12 | completed |2013-10-03|
| 9 | 3 | 10 | 12 | completed |2013-10-03|
| 10 | 4 | 13 | 12 | cancelled_by_driver|2013-10-03|
+----+-----------+-----------+---------+--------------------+----------+
Users 表存所有用户。每个用户有唯一键 Users_Id。Banned 表示这个用户是否被禁止,
Role 则是一个表示(‘client’, ‘driver’, ‘partner’)的枚举类型。
+----------+--------+--------+
| Users_Id | Banned | Role |
+----------+--------+--------+
| 1 | No | client |
| 2 | Yes | client |
| 3 | No | client |
| 4 | No | client |
| 10 | No | driver |
| 11 | No | driver |
| 12 | No | driver |
| 13 | No | driver |
+----------+--------+--------+
写一段 SQL 语句查出 2013年10月1日 至 2013年10月3日期间非禁止用户的取消率。
基于上表,你的 SQL 语句应返回如下结果,取消率(Cancellation Rate)保留两位小数。
取消率的计算方式如下:(被司机或乘客取消的非禁止用户生成的订单数量) / (非禁止用户生成的订单总数)
+------------+-------------------+
| Day | Cancellation Rate |
+------------+-------------------+ 
| 2013-10-01 | 0.33 | 
| 2013-10-02 | 0.00 | 
| 2013-10-03 | 0.50 | 
+------------+-------------------+*/
/*create table "Users"(
       "Users_Id" number primary key,
       "Banned" char(10) check("Banned" in ('Yes','No')),
       "Role" char(10) check("Role" in ('client','driver','partner'))
       );
insert into "Users" values(1,'No','client');
insert into "Users" values(2,'Yes','client');
insert into "Users" values(3,'No','client');
insert into "Users" values(4,'No','client');
insert into "Users" values(10,'No','driver');
insert into "Users" values(11,'No','driver');
insert into "Users" values(12,'No','driver');
insert into "Users" values(13,'No','driver');*/
/*create table Trips(
       "Id" number,
       "Client_Id" number references "Users"("Users_Id"),
       "Driver_Id" number references "Users"("Users_Id"),
       "City_Id" number,
       "Status" char(30) check("Status" in ('completed','cancelled_by_driver','cancelled_by_client')),
       "Request_at" date
);
insert into Trips values(1,1,10,1,'completed',to_date('2013-10-01','yyyy-MM-dd'));
insert into Trips values(2,2,11,1,'cancelled_by_driver',to_date('2013-10-01','yyyy-MM-dd'));
insert into Trips values(3,3,12,6,'completed',to_date('2013-10-01','yyyy-MM-dd'));
insert into Trips values(4,4,13,6,'cancelled_by_driver',to_date('2013-10-01','yyyy-MM-dd'));
insert into Trips values(5,1,10,1,'completed',to_date('2013-10-02','yyyy-MM-dd'));
insert into Trips values(6,2,11,6,'completed',to_date('2013-10-02','yyyy-MM-dd'));
insert into Trips values(7,3,12,6,'completed',to_date('2013-10-02','yyyy-MM-dd'));
insert into Trips values(8,2,12,12,'completed',to_date('2013-10-03','yyyy-MM-dd'));
insert into Trips values(9,3,12,12,'completed',to_date('2013-10-03','yyyy-MM-dd'));
insert into Trips values(10,4,12,12,'cancelled_by_driver',to_date('2013-10-03','yyyy-MM-dd'));
*/

with t as
(select t.*,u1.*,u2."Banned" Banned2 from Trips t join "Users" u1 on u1."Users_Id" = t."Client_Id" 
join "Users" u2 on u2."Users_Id" = t."Driver_Id"  )

select t."Request_at" "Day",
round(sum(decode(trim(t."Status"),'cancelled_by_driver',1,0))/count(*),2) "Cancellation Rate"
 from t where t."Banned" = 'No ' and t.Banned2 = 'No'  group by t."Request_at";
 
 
/*9.(10分)
Spending table:
+---------+------------+----------+--------+
| user_id | spend_date | platform | amount |
+---------+------------+----------+--------+
| 1 | 2019-07-01 | mobile | 100 |
| 1 | 2019-07-01 | desktop | 100 |
| 2 | 2019-07-01 | mobile | 100 |
| 2 | 2019-07-02 | mobile | 100 |
| 3 | 2019-07-01 | desktop | 100 |
| 3 | 2019-07-02 | desktop | 100 |
+---------+------------+----------+--------+
这张表记录了用户在一个在线购物网站的支出历史,该在线购物平台同时拥有桌面端('desktop')和手机端('mobile')的应用程序。
写一段 SQL 来查找每天 仅 使用手机端用户、仅 使用桌面端用户和 同时 使用桌面端和手机端的用户人数和总支出金额。 
查询结果格式如下例所示:
Result table:
+------------+----------+--------------+-------------+
| spend_date | platform | total_amount | total_users |
+------------+----------+--------------+-------------+
| 2019-07-01 | desktop | 100 | 1 |
| 2019-07-01 | mobile | 100 | 1 |
| 2019-07-01 | both | 200 | 1 |
| 2019-07-02 | desktop | 100 | 1 |
| 2019-07-02 | mobile | 100 | 1 |
| 2019-07-02 | both | 0 | 0 |
+------------+----------+--------------+-------------+*/
/*create table Spending(
       user_id number,
       spend_date date,
       platform char(10),
       amount number
);
insert into Spending values(1,to_date('2019-07-01','yyyy-MM-dd'),'mobile',100);
insert into Spending values(1,to_date('2019-07-01','yyyy-MM-dd'),'desktop',100);
insert into Spending values(2,to_date('2019-07-01','yyyy-MM-dd'),'mobile',100);
insert into Spending values(2,to_date('2019-07-02','yyyy-MM-dd'),'mobile',100);
insert into Spending values(3,to_date('2019-07-01','yyyy-MM-dd'),'desktop',100);
insert into Spending values(3,to_date('2019-07-02','yyyy-MM-dd'),'desktop',100);*/

select *from spending 

select * from(
select spend_date,decode(s,1,'mobile',3,'desktop','both') platform,
total_amount,count(*) total_users from
(select user_id,spend_date,sum(amount) total_amount,sum(decode(trim(platform),'mobile',1,'desktop',3)) s
from 
(select * from spending order by spend_date,user_id) 
group by user_id,spend_date

group by
spend_date,decode(s,1,'mobile',3,'desktop','both') ,
total_amount order by spend_date,total_amount)
union all 
select to_date('2019-07-02','yyyy-MM-dd'),'both',0,0 from dual;

select distinct spend_date,
case when platform=platform1 then platform
     else 'both'
end platform,
case when a=1 then sum(amount)over(partition by a order by user_id)
     else amount
end total_amount
from
(select s1.user_id user_id,s1.spend_date spend_date,
s1.platform platform,s2.platform platform1,s1.amount amount,
case when s1.platform!=s2.platform then 1
     else 0
end a
from spending s1 join spending s2 on s1.user_id=s2.user_id and s1.spend_date=s2.spend_date 
) order by spend_date,total_amount;
-------------------------------------------------
select * from spending;
with aa as(select s1.user_id,s1.spend_date,s1.platform,s1.amount,s2.platform as a,s2.amount as b from Spending s1 left join Spending s2 
on s1.user_id=s2.user_id and s1.spend_date=s2.spend_date and s1.platform <>s2.platform)
select spend_date,platform,sum(amount),count(*) from aa where a is null group by spend_date,platform 
union all
select spend_date,'both',
       sum(case when a is not null then amount else 0 end),
       sum(case when a is not null then 1 else 0 end)/2 from aa  group by spend_date

----------------------------------------------
select t.spend_date,t.platform,ifnull(t3.total_amount,0) as total_amount ,ifnull(t3.total_users,0) as total_users from
(select distinct spend_date,'both' as platform from Spending 
union all 
select distinct spend_date,'mobile' as platform from Spending
union all
select distinct spend_date,'desktop' as platform from Spending)
t left join 
(select spend_date,platform,sum(amount) as `total_amount`,count(*) as `total_users` from (
    select spend_date,user_id,sum(amount) `amount`,
case when count(distinct platform) > 1 then 'both'
else platform end as platform
from Spending group by spend_date,user_id
) t2 group by spend_date,platform
) t3 on t.spend_date = t3.spend_date and t.platform = t3.platform;
--------------------------------------------------
select t.spend_date,t.platform,ifnull(t3.total_amount,0) as total_amount ,ifnull(t3.total_users,0) as total_users from
(select distinct spend_date,'both' as platform from Spending 
union all 
select distinct spend_date,'mobile' as platform from Spending
union all
select distinct spend_date,'desktop' as platform from Spending)
t left join 
(select spend_date,platform,sum(amount) as `total_amount`,count(*) as `total_users` from (
    select spend_date,user_id,sum(amount) `amount`,
case when count(distinct platform) > 1 then 'both'
else platform end as platform
from Spending group by spend_date,user_id
) t2 group by spend_date,platform
) t3 on t.spend_date = t3.spend_date and t.platform = t3.platform;
--------------------------------------------
with s1 as (select * from Spending where platform='mobile'),--手机端
     s2 as (select * from Spending where platform='desktop'), --电脑端
     s3 as(select (case when s1.spend_date is not null then s1.spend_date else s2.spend_date end) spend_date,
                  (case when s1.platform is not null and s2.platform is null then s1.platform
                        when s2.platform is not null and s1.platform is null then s2.platform
                        else 'both' end) platform,
                   nvl(s1.amount,0)+nvl(s2.amount,0) amount 
           from s1 full join s2 on s1.user_id=s2.user_id and s1.spend_date=s2.spend_date)
select s3.spend_date,
       s3.platform,
       s3.amount,
       s4.total_users 
from s3 left join (select spend_date,platform,count(*) total_users from s3 group by spend_date,platform) s4
on  s3.spend_date=s4.spend_date and s3.platform=s4.platform 
order by s3.spend_date;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/763834.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C# winForm】ProgressBar进度条

1.控件介绍 进度条通常用于显示代码的执行进程进度&#xff0c;在一些复杂功能交互体验时告知用户进程还在继续。 在属性栏中&#xff0c;有三个值常用&#xff1a; Value表示当前值&#xff0c;Minimum表示进度条范围下限&#xff0c;Maximum表示进度条范围上限。 2.简单实…

【产品经理】订单处理12-订单的取消与反取消

在电商ERP系统中&#xff0c;订单取消与反取消也是常见功能之一。 订单取消与反取消也是电商ERP系统的常见功能&#xff0c;本次主要讲解下订单取消与反取消的逻辑。 一、订单取消 在电商ERP系统中&#xff0c;订单取消一般由审单员操作&#xff0c;此类取消一般是由于上下游…

商家团购app微信小程序模板

手机微信商家团购小程序页面&#xff0c;商家订餐外卖小程序前端模板下载。包含&#xff1a;团购主页、购物车订餐页面、我的订单、个人主页等。 商家团购app微信小程序模板

sublime如何运行Html文件?

背景&#xff1a; 在sublime上面写了html代码以后&#xff0c;怎么运行html文件来进行debug呢&#xff1f;如果去点击保存的HTML文件&#xff0c;每次这样就会很麻烦&#xff0c;能不能直接在sublime里面点什么就可以直接打开浏览器运行呢&#xff1f;答案是OK的。 1-确认Vie…

Android面试题经典之Glide取消加载以及线程池优化

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 Glide通过生命周期取消加载 生命周期回调过程 onStop —>RequestManager.onStop –>RequestTracker.pauseRequest –> SingleRequest…

SpringSecurity6 | 基于数据库实现登录认证

SpringSecurity6 | 基于数据库认证 ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringSecurity6 ✨特色专栏: MySQL学习 🥭本文内容: SpringSecurity6 | 基于数据库实现登…

Cell | 泛癌蛋白基因组学分析,揭示癌症治疗靶点(章冰/高强)

– DOI: 10.1016/j.cell.2024.05.039 Pan-cancer proteogenomics expands the landscape of therapeutic targets 留意最新动态&#xff0c;请关注微信公众号&#xff1a;组学之心 最近课题组在写泛癌的综述&#xff0c;刚好这篇相关研究论文在6.24发表&#xff0c;新鲜出炉…

Toshiba东芝TB6612FNG电机驱动IC:释放性能与多功能性

在嵌入式系统和机器人技术领域&#xff0c;电机控制是一个关键方面&#xff0c;对项目的性能和可靠性有着显著影响。东芝的TB6612FNG电机驱动IC作为一个稳健且多功能的解决方案&#xff0c;在驱动双直流电机方面脱颖而出&#xff0c;提供了高性能、可靠性和易用性。本文将深入探…

Java [ 基础 ] 异常处理 ✨

✨探索Java基础 异常处理✨ 在Java编程中&#xff0c;异常处理是一个非常重要的概念&#xff0c;它有助于在程序运行时捕获和处理错误&#xff0c;从而使程序更加健壮和可靠。 本文将介绍Java中的异常基础知识、异常类型、异常处理机制以及最佳实践。 一、什么是异常&#…

SQL语句的案例分析

根据提供的图片内容&#xff0c;这段文字看起来像是一个SQL查询的一部分&#xff0c;特别是一个用于删除数据的语句。以下是对这段SQL的核心内容整理&#xff1a; ### 核心内容整理&#xff1a; 1. **删除操作**&#xff1a; - 使用DELETE语句来删除数据。 2. **子查询**…

惠海 H6900B 2.7V3.7V4.2V5V9V升12V24V48VLED升压恒流芯片IC

惠海H6900B LED升压恒流芯片IC是一款功能丰富的LED驱动解决方案&#xff0c;为高亮度LED灯串设计。以下是针对该产品的进一步分析和解释&#xff1a; 产品特点 高效率&#xff1a;高达95%以上的效率意味着在驱动LED时&#xff0c;只有很少的能量转化为热量&#xff0c;从而提…

轨迹规划 | 图解模型预测控制MPC算法(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 模型预测控制原理2 差速模型运动学3 基于差速模型的MPC控制4 仿真实现4.1 ROS C实现4.2 Python实现4.3 Matlab实现 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划(图搜索、…

“论单元测试方法及应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 1、概要叙述你参与管理和开发的软件项目,以吸你所担的主要工作。 2、结给你参与管理和开发的软件项目&#xff0c;简要叙述单元测试中静态测试和动态测试方法的基本内容。 3、结给你惨与管理和研发的软件项目,体阐述在玩测试过程中,如何确定白盒测试的覆盖标准,及如…

YOLO在目标检测与视频轨迹追踪中的应用

YOLO在目标检测与视频轨迹追踪中的应用 引言 在计算机视觉领域&#xff0c;目标检测与视频轨迹追踪是两个至关重要的研究方向。随着深度学习技术的飞速发展&#xff0c;尤其是卷积神经网络&#xff08;CNN&#xff09;的广泛应用&#xff0c;目标检测与视频轨迹追踪的性能得到…

WAIC | 斯梅尔数学与计算研究院邀您莅临WAIC 2024“数学与人工智能”论坛

当我们谈论起人工智能这一变革性力量时&#xff0c;就不得不提及数学。人工智能作为当今社会的热门话题&#xff0c;从AlphaGo到ChatGPT&#xff0c;从智能制造到数字文旅&#xff0c;它的发展和应用深刻地影响着行业和人们的生活。然而&#xff0c;人工智能的发展和基础离不开…

怎么把视频字幕提取出来?一招教你提取视频字幕

想必大家一定很有同感吧&#xff0c;视频已成为我们获取知识与新闻的主要渠道。 面对如此众多的视频资源&#xff0c;如何迅速筛选出核心信息并进行有效管理&#xff0c;成为了一项迫切需要解决的问题。 视频字幕提取翻译软件的问世&#xff0c;利用尖端的语音识别技术&#…

Kimi 上下文缓存功能开启公测!降低使用费用,加快模型相应速度

7月2日&#xff0c;系统之家发布消息&#xff0c;月之暗面科技有限公司旗下的Kimi开放平台正式推出上下文缓存功能&#xff0c;并已开放公测。这项功能专为处理频繁请求和大量重复引用初始上下文的场景设计&#xff0c;能有效降低使用长文本模型的成本&#xff0c;并显著提升处…

森林防火气象站:守护森林安全的科技利器

在广袤无垠的森林中&#xff0c;火灾一直是威胁森林生态安全的重要因素。为了有效预防和控制森林火灾&#xff0c;科学家们不断研发新技术&#xff0c;而森林防火气象站正是这一领域的重要成果之一。其中&#xff0c;森林防火气象站凭借其强大的功能和独特的设计&#xff0c;在…

laravel对接百度智能云 实现智能机器人

创建API Key和 Secret Key进入网址&#xff1a;百度智能云千帆大模型平台 如下图操作&#xff1a; 填写完毕点击确认后&#xff0c;即可得到sk和ak 后端接口实现代码&#xff1a; //调用百度智能云第三方机器人接口public function run($text) {$curl curl_init();curl_setop…

【基于R语言群体遗传学】-2-模拟基因型(simulating genotypes)

书接上文&#xff0c;我们昨天讨论了遗传的哈代温伯格比例&#xff1a; 【基于R语言群体遗传学】-1-哈代温伯格基因型比例-CSDN博客 接下来&#xff0c;如果我们能够模拟一个过程并观察模拟结果与我们预期的是否相符&#xff0c;这通常有助于指导我们对这个过程的直观感觉。让…