找到过去 10 年中收入最高的人
find highest earners in last 10 years
create table empSal
(
pername varchar(200),
salary number(10,2),
salDate date
);
begin
insert into empsal values('ak',6300.0,'31-JAN-2012');
insert into empsal values('js',6400.0,'31-JAN-2012');
insert into empsal values('pk',6500.0,'31-JAN-2012');
insert into empsal values('ak',6000.0,'28-FEB-2012');
insert into empsal values('js',5800.0,'28-FEB-2012');
insert into empsal values('pk',2300.0,'28-FEB-2012');
end;
given empsal table(definition given) 多年来每个人都在月底领取工资。
需要编写 plsql 查询以根据过去 10 年的数据查找 3 个收入最高的人?
我们可以在这里使用RANK
解析函数:
WITH cte AS (
SELECT pername, SUM(salary) AS total_salary,
RANK() OVER (ORDER BY SUM(salary) DESC) sal_rank
FROM empSal
WHERE salDate >= TRUNC(sysdate, 'YEAR') - INTERVAL '10 years'
GROUP BY pername
)
SELECT pername, total_salary
FROM cte
WHERE sal_rank <= 3
ORDER BY sal_rank DESC;
遗憾的是你实际上没有 运行 发布代码(因为它会失败;table 不能有那个主键,它没有意义)。
总之:总结过去10年的薪水,并按降序排列。然后 select 个想要的。
WITH
temp
AS
( SELECT pername,
SUM (salary) sumsal,
RANK () OVER (ORDER BY SUM (salary) DESC) rnk
FROM empsal
WHERE EXTRACT (YEAR FROM saldate) >= EXTRACT (YEAR FROM SYSDATE) - 10
GROUP BY pername)
SELECT pername, sumsal
FROM temp
WHERE rnk <= 3;
EMPSAL table 中的主键不允许您多次插入同一员工。请删除它或创建另一列作为您的主键。
下面是一个基本的 select 陈述,它将选出从当前日期算起的过去 10 年中收入最高的前三名。
with salary_tenyears as (
select pername , sum(salary ) salary
from empsal
where salDate >= trunc(add_months(sysdate,-12*10),'MM')
group by pername
)
select *
from ( select pername,salary , row_number() over( order by salary desc) rnk
from salary_tenyears
) a
where rnk <=3;
create table empSal
(
pername varchar(200),
salary number(10,2),
salDate date
);
begin
insert into empsal values('ak',6300.0,'31-JAN-2012');
insert into empsal values('js',6400.0,'31-JAN-2012');
insert into empsal values('pk',6500.0,'31-JAN-2012');
insert into empsal values('ak',6000.0,'28-FEB-2012');
insert into empsal values('js',5800.0,'28-FEB-2012');
insert into empsal values('pk',2300.0,'28-FEB-2012');
end;
given empsal table(definition given) 多年来每个人都在月底领取工资。 需要编写 plsql 查询以根据过去 10 年的数据查找 3 个收入最高的人?
我们可以在这里使用RANK
解析函数:
WITH cte AS (
SELECT pername, SUM(salary) AS total_salary,
RANK() OVER (ORDER BY SUM(salary) DESC) sal_rank
FROM empSal
WHERE salDate >= TRUNC(sysdate, 'YEAR') - INTERVAL '10 years'
GROUP BY pername
)
SELECT pername, total_salary
FROM cte
WHERE sal_rank <= 3
ORDER BY sal_rank DESC;
遗憾的是你实际上没有 运行 发布代码(因为它会失败;table 不能有那个主键,它没有意义)。
总之:总结过去10年的薪水,并按降序排列。然后 select 个想要的。
WITH
temp
AS
( SELECT pername,
SUM (salary) sumsal,
RANK () OVER (ORDER BY SUM (salary) DESC) rnk
FROM empsal
WHERE EXTRACT (YEAR FROM saldate) >= EXTRACT (YEAR FROM SYSDATE) - 10
GROUP BY pername)
SELECT pername, sumsal
FROM temp
WHERE rnk <= 3;
EMPSAL table 中的主键不允许您多次插入同一员工。请删除它或创建另一列作为您的主键。
下面是一个基本的 select 陈述,它将选出从当前日期算起的过去 10 年中收入最高的前三名。
with salary_tenyears as (
select pername , sum(salary ) salary
from empsal
where salDate >= trunc(add_months(sysdate,-12*10),'MM')
group by pername
)
select *
from ( select pername,salary , row_number() over( order by salary desc) rnk
from salary_tenyears
) a
where rnk <=3;