Oracle查询思路-语句分析

nowsdt 2017-09-22 06:01:06
最近在看关于oracle的书,遇到了一些不理解的sql查询,不理解其中的思路,烦请各位能指出其中的思想关键所在,谢谢

drop table job_history; 
create table job_history(
employee_id number not null,
start_date date,
end_date date,
ename varchar2(30),
job varchar2(30),
job_id number
);

delete from job_history;
insert into job_history values(107,to_date('2014-07-07','yyyy-mm-dd'),to_date('2015-07-07','yyyy-mm-dd'),'polly','sales',1);
insert into job_history values(107,to_date('2015-07-07','yyyy-mm-dd'),to_date('2018-07-07','yyyy-mm-dd'),'polly','finance',2);
insert into job_history values(104,to_date('2014-06-07','yyyy-mm-dd'),to_date('2015-06-07','yyyy-mm-dd'),'hanmeimei','secrectory',3);
insert into job_history values(104,to_date('2015-06-07','yyyy-mm-dd'),to_date('2017-06-07','yyyy-mm-dd'),'hanmeimei','finance',2);
insert into job_history values(105,to_date('1985-06-07','yyyy-mm-dd'),to_date('1987-02-07','yyyy-mm-dd'),'litao','engineer',4);
insert into job_history values(105,to_date('1987-06-07','yyyy-mm-dd'),to_date('2000-02-07','yyyy-mm-dd'),'litao','operations person',5);
insert into job_history values(4,to_date('2003-06-07','yyyy-mm-dd'),to_date('2006-04-07','yyyy-mm-dd'),'lilei','manager',6);
insert into job_history values(11,to_date('2006-08-07','yyyy-mm-dd'),to_date('2009-04-07','yyyy-mm-dd'),'lilei','ceo',7);
insert into job_history values(5,to_date('1999-01-07','yyyy-mm-dd'),to_date('1999-08-07','yyyy-mm-dd'),'uncle wang','cto',8);
insert into job_history values(12,to_date('2009-05-07','yyyy-mm-dd'),to_date('2010-08-07','yyyy-mm-dd'),'uncle wang','sales',9);
insert into job_history values(6,to_date('2001-07-07','yyyy-mm-dd'),to_date('2005-06-07','yyyy-mm-dd'),'jim','police',10);
insert into job_history values(13,to_date('2005-07-07','yyyy-mm-dd'),to_date('2009-10-07','yyyy-mm-dd'),'jim','sales',1);
insert into job_history values(7,to_date('2004-09-07','yyyy-mm-dd'),to_date('2008-06-07','yyyy-mm-dd'),'green','waiter',11);
insert into job_history values(14,to_date('2008-09-07','yyyy-mm-dd'),to_date('2015-06-07','yyyy-mm-dd'),'green','waiter',11);
insert into job_history values(1, to_date('2016-02-03', 'yyyy-mm-dd'), to_date('2016-09-03', 'yyyy-mm-dd'), 'lilei','reporter',12);
insert into job_history values(105, to_date('2016-02-03', 'yyyy-mm-dd'), to_date('2016-09-03', 'yyyy-mm-dd'), 'litao', 'reporter',12);
insert into job_history values (104, to_date('2016-02-03', 'yyyy-mm-dd'), to_date('2016-09-03', 'yyyy-mm-dd'),'hanmeimei', 'reporter',12);
insert into job_history values (104, to_date('2016-11-03', 'yyyy-mm-dd'), to_date('2017-10-03', 'yyyy-mm-dd'), 'hanmeimei', 'model',13);




一:
最终结果为了查询:员工在自己做过的工作岗位上年限一样的员工列表:
1.普通的表自连接查询很好理解
2.第二种方式,最大年限等于最小年限的这种方法不理解,或者group by之后的数据结构是啥样的?
二:




1.第一种方法,还算好理解
2.第二种方式,是基于什么思路或者方向的?

上述内容来自《精通oracle》第二版,第4章,有兴趣的可以看看
...全文
319 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nowsdt 2017-09-27
  • 打赏
  • 举报
回复
引用 3 楼 chengccy 的回复:
第一个表是一个员工任职历史表, 例如: 张三 开发 1年 张三 主管 1年 张三 产品经理 1年 李四 开发 1年 李四 组长 2年 李四 主管 1年 如果按照员工分组, 如果他任职的岗位年限都一样的话, 那最大值会等于最小值,比如张三
瞬间明白了,有时候这种逻辑挺奇怪的,点拨一下明白了……谢谢
碧水幽幽泉 2017-09-27
  • 打赏
  • 举报
回复
引用 3 楼 chengccy 的回复:
第一个表是一个员工任职历史表,
例如:
张三 开发 1年
张三 主管 1年
张三 产品经理 1年

李四 开发 1年
李四 组长 2年
李四 主管 1年

如果按照员工分组, 如果他任职的岗位年限都一样的话, 那最大值会等于最小值,比如张三

要是任职岗位的年限不一样呢?比如:李四。 最大值减去最小值等于1,再除以3就有问题了。
chengccy 2017-09-25
  • 打赏
  • 举报
回复
引用 5 楼 acen_chen 的回复:
并非只针对单一连续,随便怎样都可以用这公式算,逻辑没问题
这个要看业务怎样的。一般来说:每个订单是有周期的,然后计算每个订单的平均周期; 例如: 订单 订单日 订单完成时间 订单1 2017/1/1 2017/1/10 订单2 2017/1/1 2017/1/15 这种业务的话,是先计算出每个订单的周期,然后AVG。 楼主的给的例子,更像是订单没有周期的概念,需求为求一段时间,平均多少天产生1个订单。
acen_chen 2017-09-25
  • 打赏
  • 举报
回复
并非只针对单一连续,随便怎样都可以用这公式算,逻辑没问题
chengccy 2017-09-25
  • 打赏
  • 举报
回复
第二个表格, 根据第一个SQL的写法可以得出该客户的订单是连续的且单一的. 那自然是可以(最大-最小)/数量; 但是这种表设计很不好,现实中也少见.
chengccy 2017-09-25
  • 打赏
  • 举报
回复
第一个表是一个员工任职历史表, 例如: 张三 开发 1年 张三 主管 1年 张三 产品经理 1年 李四 开发 1年 李四 组长 2年 李四 主管 1年 如果按照员工分组, 如果他任职的岗位年限都一样的话, 那最大值会等于最小值,比如张三
nowsdt 2017-09-23
  • 打赏
  • 举报
回复
引用 1 楼 qq646748739 的回复:
你说的第二种方式是指哪个SQL语句?
说的是文中按照集合的方式给出的sql,,两个问题都是第二个比较短的sql
碧水幽幽泉 2017-09-22
  • 打赏
  • 举报
回复
你说的第二种方式是指哪个SQL语句?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧