如何从PL / SQL中的表中获取x索引行?

时间:2017-04-01 18:08:31

标签: sql plsql

首先随时纠正我的英语和 我刚刚开始使用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;

3 个答案:

答案 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;

它可用作聚合函数和分析函数。