Oracle同程网络的几道笔试题解答(不一定对,欢迎拍砖)

Posted DB宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle同程网络的几道笔试题解答(不一定对,欢迎拍砖)相关的知识,希望对你有一定的参考价值。


【Oracle】同程网络的几道笔试题解答(不一定对,欢迎拍砖)

【Oracle】同程网络的几道笔试题解答(不一定对,欢迎拍砖)
【Oracle】同程网络的几道笔试题解答(不一定对,欢迎拍砖)       

    今天小麦苗给大家分享的是同程网络的几道笔试题解答(不一定对,欢迎拍砖)。


同程网络的几道笔试题解答(不一定对,欢迎拍砖)



一、 问答题1题30分

下列脚本语句语法上有哪些问题,优化后该怎么写

select substr(t.dd,1,7) as month, count(distinct t.id)

from (

select fio.memberfk as id, to_date(fio.createdate) as dd,

row_number() over (partition by fio.memberfk order by to_date(fio.createdate)) as num

from middledata.factflyintorder fio

left join dimdata.dimflyintorderflag zt on fio.orderflagfk = zt.orderflagkey

where to_date(fio.createdate) >= '2016-03-01'

and to_date(fio.createdate) < '2017-04-01'

and zt.orderflagkey = 14

and fio.platfk = 501

group by fio.memberfk, to_date(fio.createdate)

) t

where t.num = 1

order by month

group by month

 

 

 

--默认FIO.CREATEDATE为日期类型

1.去掉表DIMDATA.DIMFLYINTORDERFLAG

2.最后的ORDER BYGROUP BY位置调换

3.FIO.CREATEDATE BETWEEN to_date('2016-03-01','YYYY-MM-DD') AND to_date('2017-04-01','YYYY-MM-DD')

4.剩下的看执行计划吧

 

优化后:

SELECT SUBSTR(T.DD, 1, 7) AS MONTH, COUNT(DISTINCT T.ID)

  FROM (SELECT FIO.MEMBERFK AS ID,

               TO_CHAR(FIO.CREATEDATE,'YYYY-MM-DD') AS DD,

               ROW_NUMBER() OVER(PARTITION BY FIO.MEMBERFK ORDER BY TO_DATE(FIO.CREATEDATE)) AS NUM

          FROM MIDDLEDATA.FACTFLYINTORDER FIO

         WHERE FIO.CREATEDATE BETWEEN to_date('2016-03-01','YYYY-MM-DD') AND to_date('2017-04-01','YYYY-MM-DD')

           AND FIO.PLATFK = 501

         GROUP BY FIO.MEMBERFK, TO_DATE(FIO.CREATEDATE)) T

 WHERE T.NUM = 1

 GROUP BY MONTH

 ORDER BY MONTH

 

二、 操作题3题70分

机票订单middledata.factflyintorder

相关字段

字段名称

字段

数据类型

描述

订单流水号

serialid

string


航司ID

airwaysfk

int


会员ID

memberfk

int


创建时间

createdate

timestamp


营收

totaltakeoff

decimal(10,2)


航段数

legcount

int


订单状态

issuccess

tinyint

1-成功;2-进行中;3-失败

订单是否有效

isvalid

tinyint

0-否;1-是

是否测试单

istest

int

0-否;1-是

机票航司维度表:dimdata.dimflyairway

相关字段如下:

字段名称

字段

数据类型

描述

航司ID

flyairwaykey

int


航司二字码

flyairwaycode

string


航司名称

flyairwaydes

string


 

根据上面提供信息下面的问题编写脚本:

1)2017年以来每月的均航段营收(提示:均航段营收=营收/航段sum函数;成功订单,排除测试和无效单)

 

SELECT TO_CHAR(A.CREATEDATE, 'YYYYMM') AS 月份,

       SUM(A.TOTALTAKEOFF / LEGCOUNT) AS 均航段营收

  FROM MIDDLEDATA.FACTFLYINTORDER A

 WHERE A.CREATEDATE >= TO_DATE('20170101', 'YYYYMMDD')

   AND ISVALID = 1

   AND ISTEST = 0

 GROUP BY TO_CHAR(A.CREATEDATE, 'YYYYMM');

 

 

2)2017年5月各航司的总营收输出时间,航司二字码和营收数据并按营收倒序排列(提示表关联sum,order by

 

 

SELECT A.CREATEDATE AS 输出时间,

       B.FLYAIRWAYCODE AS 航司二字码,

       SUM(A.TOTALTAKEOFF) AS 营收数据

  FROM MIDDLEDATA.FACTFLYINTORDER A

  JOIN DIMDATA.DIMFLYAIRWAY B

    ON A.AIRWAYSFK = B.FLYAIRWAYKEY

 WHERE A.CREATEDATE = TO_DATE('201705', 'YYYYMM')

 GROUP BY A.AIRWAYSFK, A.CREATEDATE, B.FLYAIRWAYCODE

 ORDER BY TOTALTAKEOFF DESC;

 

3)2017年6月1号各航司营收最高的订单,输出航司二字码和订单号(提示表关联Row_number,Partition by

 

SELECT 航司二字码,订单号

  FROM (SELECT B.FLYAIRWAYCODE AS 航司二字码,

               SUM(A.TOTALTAKEOFF) AS 营收数据,

               A.SERIALID 订单号,

               ROW_NUMBER() OVER(PARTITION BY A.AIRWAYSFK, B.FLYAIRWAYCODE, A.SERIALID ORDER BY SUM(A.TOTALTAKEOFF) DESC ) RN

          FROM MIDDLEDATA.FACTFLYINTORDER A

          JOIN DIMDATA.DIMFLYAIRWAY B

            ON A.AIRWAYSFK = B.FLYAIRWAYKEY

         WHERE A.CREATEDATE = TO_DATE('20170601', 'YYYYMMDD')

         GROUP BY A.AIRWAYSFK, B.FLYAIRWAYCODE, A.SERIALID)

 WHERE RN = 1;

 

 


【Oracle】同程网络的几道笔试题解答(不一定对,欢迎拍砖)


DB笔试面试历史连接

http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

【Oracle】同程网络的几道笔试题解答(不一定对,欢迎拍砖)


DBA宝典小程序

  

【Oracle】同程网络的几道笔试题解答(不一定对,欢迎拍砖)

About Me:小麦苗

 版权所有,欢迎分享本文,转载请保留出处

【Oracle】同程网络的几道笔试题解答(不一定对,欢迎拍砖)


以上是关于Oracle同程网络的几道笔试题解答(不一定对,欢迎拍砖)的主要内容,如果未能解决你的问题,请参考以下文章

10道腾讯C++/Java笔试真题你能做对几道?3道就赢了80%的竞争者(含答案)

Linux下C语言的几道经典面试题

几道java基础题 求大神解答

笔试算法题及解答(Python)

Java笔试题解答和部分面试题

大厂面试常见的几道SQL题,看你能答吗?