日期:2014-05-17  浏览次数:20694 次

oracle
1:请问oracle 怎么删除重复记录
2:假设员工表中有一字段,薪资,现在要查出这表的所有信息,然后按薪资从高到底排列,前三行显示薪资排名前三的信息,其余的按原来的顺序排列。请举例说明,谢谢。oracle 数据库我不是很熟悉。

------解决方案--------------------
1.出现次数大于1,即有重复资料的sql
SQL code
select * 
from tablename 
where id in ( 
            select id 
            from tablename 
            group by id 
            having count(*) > 1 
            )

------解决方案--------------------
SQL code

with tb1 as
(
     select 1 as id,3000 as sal from dual
     union all
     select 2 as id,2000 as sal from dual
     union all
     select 3 as id,4000 as sal from dual
     union all
     select 4 as id,5000 as sal from dual
     union all
     select 5 as id,7000 as sal from dual
     union all
     select 6 as id,6000 as sal from dual
)
select id,sal from (select id,sal from (select id,sal,row_number() over(order by sal desc) as rn from tb1) t where t.rn<=3) tt
union all
select id,sal from tb1 where id not in (select id from (select id,sal,row_number() over(order by sal desc) as rn from tb1) t where t.rn<=3);

        ID        SAL
---------- ----------
         5       7000
         6       6000
         4       5000
         1       3000
         2       2000
         3       4000