已經對試題做了化名處理。
表記錄如下:
根據表記錄,利用sql得出如下的結果:
這裡之所以記錄下來,是因為這個sql必須要用到高階分析函式,就是分組內排序和分組求和。
意思就是,題目要求就是按照deptno來分組,然後在分組內將記錄按照sal來排序,並且求得每條記錄的sal在該分組內總和sal的佔比。
select deptno,
empno,
ename,
sal,
rank() over(partition by deptno order by sal) as "薪水排名",
round((sal / (sum(sal) over(partition by deptno))) * 100, 2) || '%' as "薪水佔比"
from emp
當時我只知道要使用這兩個函式,但是具體寫法確實搞忘記了。
根據分組函式的使用,我們可以求得每個部門內薪水最高的員工,如果是銷售記錄表,我們同樣可以求得,銷售業績超過部門業績50%的銷售人員,等等這些都是可以的。
比如,我們需要知道每個部門薪水最高的員工記錄:
select deptno, empno, ename, sal
from (select deptno,
empno,
ename,
sal,
rank() over(partition by deptno order by sal desc) as rn
from emp)
where rn = 1
要求得最高,那麼分組內必須降序排列,然後提取每個組第乙個記錄即可。
要求得,銷售業績超過部門業績50%的銷售人員,那麼必須使用前面的:
round((sal / (sum(sal) over(partition by deptno))) * 100, 2)
今天的乙個sql面試題
今天的乙個sql面試題當時沒做出來,後來從網上查到的解決方法及相關資料 表結構 表名 page id int url varchar title varchar body varchar 用乙個sql查詢將url匹配的排在最前,title匹配的其次,body匹配最後,沒有任何字段匹配的,不返回 用u...
SQL面試題之一
某年某月某日某司出如下題 月份 部門 績效 一月 01 10 一月 02 5 二月 02 8 二月 01 3 三月 03 2 三月 03 4 要得到如下結果 部門 一月 二月 三月 01 10 3 02 5 8 03 6 當時寫得不好,現重寫一下 以下實現為oracle資料庫 create tabl...
今天對面試題做乙個總結
一 string為什麼是final 這個問題可以從兩方面考慮 效率和安全性 當string類被宣告為final時,其相應的string的方法也為final,能夠提高 的執行效率 當string類被宣告為final時,表明其不可被繼承,也就是說如果有乙個string的引用其一定是string物件,而不...