SQL 今天的乙個sql面試題(分組函式使用)

2021-07-05 17:39:08 字數 1174 閱讀 9886

已經對試題做了化名處理。

表記錄如下:

根據表記錄,利用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物件,而不...