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数据库中所有的表空间(数据库表空间怎么看)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)