首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询-前3个求和(Sal)

SQL查询-前3个求和(Sal)
EN

Stack Overflow用户
提问于 2014-02-17 22:19:59
回答 4查看 377关注 0票数 1

嗨,我想从下面的查询中获得前3个没有重复的总和(工资)。我们不能使用rownum,因为它会给出重复项。有人能帮帮我吗?

代码语言:javascript
复制
SELECT d.dname, SUM(e.sal)
FROM emp e ,dept d
WHERE e.deptno = d.deptno
GROUP BY d.dname;
EN

回答 4

Stack Overflow用户

发布于 2014-02-17 23:57:03

代码语言:javascript
复制
   select dname,sum(distinct sal) from 
   (SELECT d.dname dname, sal,
    dense_rank() over (partition by e.deptno order by sal desc) rn 
    FROM emp e,dept d WHERE e.deptno = d.deptno) where rn<=3 group by dname;

在内部查询中,我查询了dname、以及通过使用dense_rank()函数,我已经将行号赋给了desc

中没有明智的薪水

例如:

代码语言:javascript
复制
dname  sal  rn
.....  ...  ...
acc    5000  1
acc    3000  2
acc    3000  2
acc    2000  3
bcc    4500  1
bcc    3000  2 .....etc

外部的distinct关键字我刚刚使用distinct关键字过滤了薪水

票数 1
EN

Stack Overflow用户

发布于 2014-02-17 22:59:16

您可以尝试执行以下查询:

代码语言:javascript
复制
Select
  Agg_Sal.Dname, 
  Agg_Sal.Total_Sal,
  Rank() Over (Partition By Dname Order By Total_Sal Desc) Rank
From 
  (Select 
    D.Dname Dname, 
    Sum(Sal) As Total_Sal 
  From 
    Emp E, Dept D
  Where
    E.Deptno = D.Deptno
  Group By
    D.Dname) Agg_Sal
Where 
  Rank <= 3
Order By 
  Rank

它类似于Here上的上一个示例

票数 0
EN

Stack Overflow用户

发布于 2014-02-18 10:30:54

如果你按薪水降序排序,那么rownum应该是有效的:

代码语言:javascript
复制
select *
  from (select d.dname, sum(e.sal)
          from emp e, dept d
         where e.deptno = d.deptno
         group by d.dname
         order by 2 desc)
 where rownum <= 3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21831476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档