sum(sal)over(partition by deptno) 為開(kāi)窗函數(shù),計(jì)算每一個(gè)分組(按部門(mén)編號(hào)deptno分組)的工資總和。sal/sum(sal)over(partition by deptno)計(jì)算的是每一名員工的薪資部門(mén)占比。
正確答案是:C
專(zhuān)業(yè)分析如下:
A: `select *, sal/(select sum(sal) from emp) as 薪資部門(mén)占比 from emp;`
- 這條語(yǔ)句計(jì)算的是每個(gè)員工的薪資占全表總薪資的比例,而不是按部門(mén)計(jì)算的薪資占比。因此,這不是我們需要的結(jié)果。
B: `select *, sal/sum(sal) as 薪資部門(mén)占比 from emp;`
- 這條語(yǔ)句試圖直接在同一行中計(jì)算sum(sal),但沒(méi)有使用聚合函數(shù)或窗口函數(shù),因此會(huì)導(dǎo)致SQL語(yǔ)法錯(cuò)誤。
C: `select *, sal/sum(sal)over(partition by deptno) as 薪資部門(mén)占比 from emp;`
- 這條語(yǔ)句使用了窗口函數(shù)`sum(sal) over(partition by deptno)`,它會(huì)根據(jù)部門(mén)編號(hào)(deptno)對(duì)薪資進(jìn)行分區(qū)計(jì)算,從而得到每個(gè)員工在其所在部門(mén)中的薪資占比。這正是我們需要的結(jié)果。
D: `select *, sal/sum(sal)over(partition by empid) as 薪資部門(mén)占比 from emp;`
- 這條語(yǔ)句使用了窗口函數(shù)`sum(sal) over(partition by empid)`,但它是按員工編號(hào)(empid)進(jìn)行分區(qū)的,這意味著每個(gè)員工的分區(qū)只有自己一個(gè)人,因此計(jì)算結(jié)果總是1,不符合需求。
綜上所述,正確答案是C。