在Oracle中将一张表进行去重处理,只留下最新记录

在Oracle中将一张表进行去重处理,只留下最新记录,第1张

SELECT A, D, B, C

FROM (SELECT T, ROW_NUMBER() OVER(PARTITION BY A ORDER BY C DESC) RN

FROM T_NAME T)

WHERE RN = 1

sql允许多次嵌套,子查询即嵌套其他查询中得查询

可把子查询返回结果理解成一张表,外层查询会把子查询返回的结果当成一张表

子查询要用括号括起来

将子查询放在比较运算符的右边,增强可读性

子查询的分类:

单行子查询:子查询返回一行记录,可使用单行比较运算符

多行子查询:子查询返回多行记录

--有哪些雇员薪水平均薪水之上

--1、先求平均薪水

select avg(nvl(esal,0)) from emp e;

--2把所有人的薪水和平均薪水作比较,使用的单行比较运算符

select from emp e where esal > (select avg(nvl(esal,0)) from emp e);

-- 查询雇员表哪些人是经理人

-- 1先查询所有经理人 distinct去重(多行子查询)

select distinct emgr from emp e;

--2在雇员表中过滤是经理的

select from emp where empno in (select distinct emgr from emp e);

-- 每个部门的平均薪水等级

--1求出每个部门的平均薪水等级

select edeptno,avg(nvl(esal,0)) from emp e group by edeptno;

--2根据部门平均薪水断出薪水等级

select gdeptno,sggrade from salgrade sg join (select edeptno,avg(nvl(esal,0)) avgsal from emp e group by edeptno) g on gavgsal between sglosal and sghisal;

--1求平均薪水最高的部门的部门编号

-- 求部门平均薪水

select edeptno,avg(nvl(esal,0)) from emp e group by edeptno;

-- 求最高的薪水

select max(tvsal) from (select edeptno,avg(nvl(esal,0)) vsal from emp e group by edeptno) t;

-- 求部门编号(重复的sql可以抽取为视图)

select tdeptno,tvsal from (select edeptno,avg(nvl(esal,0)) vsal from emp e group by edeptno) t where tvsal = (select max(tvsal) from (select edeptno,avg(nvl(esal,0)) vsal from emp e group by edeptno) t);

)

--2求部门的平均薪水的等级

--3求部门平均的薪水等级 (薪水等级的平均)

--求每个人的薪水等级

select edeptno, sggrade

from emp e

join salgrade sg

on esal between sglosal and sghisal;

--求部门的平均薪水等级

select tdeptno, avg(tgrade)

from (select edeptno, sggrade

from emp e

join salgrade sg

on esal between sglosal and sghisal) t

group by tdeptno;

--4求薪水最高的前5名员工

-- 所有员工薪水降序

select from emp e order by esal desc;

-- oracle中没有limit子句,rownum只存在于查询出来的虚拟表中

select from (select from emp e order by esal desc) t where rownum <=5;

--5求薪水最高的第6到10名

-- 默认对于基表 rownum,跟插入顺序有关

select rownum rn,t from emp t;

-- 对于子查询rownum跟内层查询的顺序有关

--rn顺序是根据内层查询记录进行分配的

select rownum rn,t from (select from emp e order by esal desc) t;

-- 根据rn顺序来过滤第6到10条

select from (select rownum rn,t from (select from emp e order by esal desc) t) t1 where t1rn >5 and t1rn <=10;

1、首先需要找到oracle安装目录,打开控制台管理。

2、进入控制台界面,输入用户名和密码进行登录验证。

3、登录成功,进入主界面,点击菜单栏处服务器。

4、此时在存储栏,找到表空间选项,点击打开。

5、在搜索栏输入表空间名称,进行搜索。

6、此时在下方结果栏,可以看到表空间状态。

问题是你其它字段不重复,同一个name,其实有多条数据,你按什么逻辑取数据,那些不同的字段怎么筛选。

如果随便取一条的话,

select from table where name='' where rownum=1;就返回一条

以上就是关于在Oracle中将一张表进行去重处理,只留下最新记录全部的内容,包括:在Oracle中将一张表进行去重处理,只留下最新记录、oracle使用(五)_子查询_分页rownum、怎样查询oracle数据库中所有的表空间(数据库表空间怎么看)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10197147.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存