最近在看關于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章,有興趣的可以看看
uj5u.com熱心網友回復:
你說的第二種方式是指哪個SQL陳述句?uj5u.com熱心網友回復:
說的是文中按照集合的方式給出的sql,,兩個問題都是第二個比較短的sql
uj5u.com熱心網友回復:
第一個表是一個員工任職歷史表,例如:
張三 開發 1年
張三 主管 1年
張三 產品經理 1年
李四 開發 1年
李四 組長 2年
李四 主管 1年
如果按照員工分組, 如果他任職的崗位年限都一樣的話, 那最大值會等于最小值,比如張三
uj5u.com熱心網友回復:
第二個表格, 根據第一個SQL的寫法可以得出該客戶的訂單是連續的且單一的. 那自然是可以(最大-最小)/數量;但是這種表設計很不好,現實中也少見.
uj5u.com熱心網友回復:
并非只針對單一連續,隨便怎樣都可以用這公式算,邏輯沒問題uj5u.com熱心網友回復:
這個要看業務怎樣的。一般來說:每個訂單是有周期的,然后計算每個訂單的平均周期;
例如:
訂單 訂單日 訂單完成時間
訂單1 2017/1/1 2017/1/10
訂單2 2017/1/1 2017/1/15
這種業務的話,是先計算出每個訂單的周期,然后AVG。
樓主的給的例子,更像是訂單沒有周期的概念,需求為求一段時間,平均多少天產生1個訂單。
uj5u.com熱心網友回復:
瞬間明白了,有時候這種邏輯挺奇怪的,點撥一下明白了……謝謝
uj5u.com熱心網友回復:
要是任職崗位的年限不一樣呢?比如:李四。 最大值減去最小值等于1,再除以3就有問題了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/81487.html
標籤:基礎和管理
