首先随时纠正我的英语和 我刚刚开始使用PL / SQL。
这是我的PL / SQL代码。 有一份名为“EMP”的表格,上面有员工的信息。
我的目标是获得员工工资的中位数。 因此,如果员工人数是奇数,那么我需要中间员工。
如果是,那么我需要两个中等的平均值。
到目前为止它完成了这项工作,我只是在“if”语句之后感到困惑。 获取第n个索引行的值的最简单方法是什么?
SET SERVEROUTPUT ON
DECLARE
counter Int(4);
osszeg Int(5);
temp EMP.sal%TYPE;
CURSOR wage IS
SELECT EMP.SAL
FROM EMP
ORDER BY EMP.SAL ASC;
BEGIN
OPEN wage;
counter := 0;
LOOP
FETCH wage
INTO temp;
EXIT WHEN wage%NOTFOUND;
counter := counter + 1;
END LOOP;
CLOSE wage;
我需要这里的帮助
IF MOD(counter,2) = 0 THEN
ELSE
END IF;
END;
答案 0 :(得分:1)
您可以使用分析函数,在不使用PL / SQL的情况下更容易解决SQL问题。
select t.*,
case
when mod(totcnt, 2) = 0 then
(Wage + LeadWage) / 2
else
Wage
end
from (select rownum RN, num, count(*) over(partition by 1) TotCnt,
lead(Wage) over (order by Wage) LeadWage
from Emp) t
where t.Rn = round(TotCnt / 2);
或者,如果你想使用PL / SQL,你应该把你的中值存储为一对变量(当前工资值和之前的工资值,你取得操作员,直到你不知道你的工资单是奇数还是偶数),并且在fetch内部循环使用时应始终计算前一次迭代的每个步骤的中值。
答案 1 :(得分:0)
我希望它最简单但不合适
position:fixed
答案 2 :(得分:0)
如果您只想要所有员工的工资中位数(sal),那么只需使用MEDIAN功能即可。
从emp中选择中位数(sal)作为median_wage;
它可用作聚合函数和分析函数。