`

oracle sql 经典例子 班级科目排名 去重

阅读更多
---------------------------------------------------------------------------------------
-------------------------------   经典成绩排名  ----------------------------------------
---------------------------------------------------------------------------------------

-- drop table L_Class
create table L_Class
(
c_id varchar2(20) not null primary key,
c_name varchar2(100),
c_no varchar2(50) not null unique -- 班级编号
);

-- drop table L_Student
create table L_Student 
(
s_id varchar2(20) not null primary key,
s_no varchar2(50) not null unique, -- 学号
s_name varchar2(100),
c_no varchar2(50) not null -- 班级编号
);

-- drop table L_Score;
create table L_Score
(
sc_id varchar2(20) not null primary key,
sc_score number,
sc_subject varchar2(50),
s_no varchar2(50) not null -- 学号
);


--  外键约束
alter table L_Student
      add constraint Class_Student_FK foreign key (c_no)
      references L_Class (c_no);
      
alter table L_Score
      add constraint Score_Student_FK foreign key (s_no)
      references L_Student (s_no);


      
-----------------------

insert into L_Class values('1','1班','c1');
insert into L_Class values('2','2班','c2');
insert into L_Class values('3','3班','c3');


insert into L_Student values('1','s1','david1','c1');
insert into L_Student values('2','s2','david2','c1');
insert into L_Student values('3','s3','david3','c1');
insert into L_Student values('4','s4','tom1','c2');
insert into L_Student values('5','s5','tom2','c2');
insert into L_Student values('6','s6','tom3','c2');
insert into L_Student values('7','s7','kevin','c3');
insert into L_Student values('8','s8','jerry','c3');
insert into L_Student values('9','s9','fish','c3');
insert into L_Student values('10','s10','peter','c3');



insert into L_Score values('1','61','语文','s1');
insert into L_Score values('2','62','语文','s2');
insert into L_Score values('3','63','语文','s3');
insert into L_Score values('4','64','语文','s4');
insert into L_Score values('5','65','语文','s5');
insert into L_Score values('6','66','语文','s6');
insert into L_Score values('7','67','语文','s7');
insert into L_Score values('8','68','语文','s8');
insert into L_Score values('9','69','语文','s9');
insert into L_Score values('10','70','语文','s10');
insert into L_Score values('11','71','数学','s1');
insert into L_Score values('12','72','数学','s2');
insert into L_Score values('13','73','数学','s3');
insert into L_Score values('14','74','数学','s4');
insert into L_Score values('15','75','数学','s5');
insert into L_Score values('16','76','数学','s6');
insert into L_Score values('17','77','数学','s7');
insert into L_Score values('18','78','数学','s8');
insert into L_Score values('19','79','数学','s9');
insert into L_Score values('20','80','数学','s10');



select * from L_Student t;
select t.* from L_Class t;
select * from L_Score t;



---- (全年级) 各科 成绩排名
select *
  from (
        select s.s_name       姓名,
                sc.sc_score   成绩,
                --row_number() 行号,没有并列第一
                --dense_rank() 有并列第一,接下来就是第二,
                --rank() 有并列第一,接下来就是第三
                dense_rank() over(partition by c.c_no, sc.sc_subject order by sc.sc_score desc) 排名,
                sc.sc_subject 科目,
                c.c_name      班级
          from L_Class c, L_Student s, L_Score sc
         where c.c_no = s.c_no
           and s.s_no = sc.s_no
        --and c.c_name = '3班'   --查询3班各科成绩排名
        ) tmp
 where tmp.排名 <= 3  -- 前 3 名
 --对结果集按照 班级、科目 排序
 order by tmp.班级 desc, tmp.科目 desc, tmp.成绩 desc;


-------------------------------------------------------------------------------------
----------------------------    group by ... having ...    ---------------------------
-------------------------------------------------------------------------------------

---  查询成绩表中成绩 >64 的记录,成绩分组
select sc.sc_score from L_Score sc group by sc.sc_score having sc.sc_score > 75 order by sc.sc_score desc;



-------------------------------------------------------------------------------------
----------------------------    去除重复数据    -------------------------------------
-------------------------------------------------------------------------------------

drop table L_User;

create table L_User
(
u_id varchar2(20) not null primary key,
u_name varchar2(100),
u_age number
);

insert into L_User values('1','david',20);
insert into L_User values('2','david',20);
insert into L_User values('3','kevin',23);
insert into L_User values('4','tom',25);
insert into L_User values('5','kevin',30);
insert into L_User values('6','kevin',20);


select t.*,rowid,rownum from L_User t where rownum < 5;

--- 去重( 去除名字相同的记录,保留一条 )
delete from L_User u1 where u1.rowid < (select max(u2.rowid) from L_User u2 where u1.u_name=u2.u_name);
--- 去重( 去除年龄相同的记录,保留一条 )
delete from L_User u1 where u1.rowid < (select max(u2.rowid) from L_User u2 where u1.u_age=u2.u_age);
--- 去重( 去除名字、年龄都相同的记录,保留一条 )
delete from L_User u1 where u1.rowid < (select max(u2.rowid) from L_User u2 where u1.u_name=u2.u_name and u1.u_age=u2.u_age);

 

1
3
分享到:
评论

相关推荐

    oracle SQL查询工具

    oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具...

    oracle字段去重

    ### Oracle字段去重详解 #### 一、Oracle字段去重概念与应用场景 在数据库操作过程中,数据表中可能会出现重复的数据记录,这不仅浪费存储空间,还可能导致数据分析时出现错误的结果。因此,去除重复记录是数据库...

    Oracle Sql语句转换成Mysql Sql语句

    在数据库管理领域,Oracle SQL和MySQL SQL是两种广泛使用的SQL方言,它们在语法和功能上存在一定的差异。当需要将一个基于Oracle SQL的应用程序迁移到MySQL环境时,就需要进行SQL语句的转换工作。本项目提供了一个...

    Oracle SQL高级编程

    由于标题和描述是重复的且没有提供实质性的内容,我们无法从中得知具体的Oracle SQL高级编程知识点。但是,从标题我们可以推测该文档可能是关于如何使用Oracle数据库中的SQL语言进行高级编程。Oracle数据库是一个...

    oracle sql优化分享案例

    oracle sql案例的分享ppt,具体调优和改写sql的例子

    Oracle Sql基础(beginning oracle sql中文版)

    Oracle SQL是数据库管理员和开发人员用来与Oracle数据库交互的语言,它是SQL标准的扩展,提供了许多特有的功能和优化。本资源“Oracle Sql基础(beginning oracle sql中文版)”旨在为初学者提供一个全面的Oracle ...

    Oracle SQL:经典练习题(附答案)

    本文提供的经典练习题旨在帮助初学者熟悉SQL语句的编写,特别是针对Oracle数据库特有的功能。以下将详细讲解涉及的知识点。 1. **基本查询操作**:练习题中包含了查询员工表(emp)和部门表(dept)的基础信息,...

    Oracle SQL 官方文档

    Oracle SQL 是一种强大的数据库查询和编程语言,广泛用于管理和操作Oracle数据库系统。11g第二版(11G2)是Oracle的一个重要版本,提供了许多增强功能和优化。本官方文档集包括四份重要的参考资料,涵盖了Oracle SQL...

    sql_按照某一个字段进行去重后获取全部字段

    根据题目中提供的 SQL 语句,我们可以看到这是一个较为复杂的去重操作案例,它不仅仅使用了 GROUP BY 进行分组,还结合了 EXISTS 子查询来进一步过滤结果。 #### SQL 语句解析 ```sql SELECT * FROM person_real_...

    oracle sql优化实战案例

    主要讲述oracle sql 的开发以及优化,对低效率的sql的优化方法和诊断技巧

    ORACLE SQL入门与实战经典

    不过,根据标题《ORACLE SQL入门与实战经典》,我们可以推断出这是一本关于Oracle SQL语言学习和应用的书籍。Oracle SQL是Oracle数据库的核心技术之一,用于数据查询、定义、更新和管理。接下来,将详细介绍Oracle ...

    OracleSQLDeveloper

    Oracle SQL Developer 是一款由Oracle公司推出的免费数据库管理工具,它为数据库管理员(DBA)和开发人员提供了一个全面的集成环境,以便于管理和操作Oracle数据库。这个工具的强大之处在于其直观的用户界面和广泛的...

    oracle-字符串去重函数

    传入一个字符串和该字符串的分割字符,返回去重后的字符串,可以直接在plsql中运行,简单的函数运用,能处理oracle中。资源仅供参考

    精通 ORACLE SQL高级编程 学习笔记

    精通Oracle SQL【第2版】ORACLE SQL高级编程【第二版】学习笔记

    记使用Oracle SQL Developer 迁移MySql 数据至 Oracle.docx

    在这个案例中,你需要MySQL 5.6.37、Oracle 11g以及Oracle SQL Developer。MySQL是源数据库,Oracle是目标数据库,而SQL Developer则作为迁移的桥梁。安装MySQL并配置好用户和密码,推荐使用Navicat for MySQL来管理...

    Oracle SQL Developer 使用说明

    Oracle SQL Developer 是一款由Oracle公司推出的强大的数据库管理工具,它为数据库管理员(DBA)、开发者以及数据分析师提供了全面的功能,以高效地管理和操作Oracle数据库。本文档将深入讲解Oracle SQL Developer的...

    ORACLE_SQLDeveloper使用教程

    ### Oracle SQL Developer 使用教程 #### 一、Oracle Database Home Page 的使用 在开始介绍 Oracle SQL Developer 的使用之前,我们先来看看如何使用 Oracle Database Home Page。这部分内容非常重要,因为它是...

    精通OracleSQL第2版.zip

    《精通Oracle SQL(第2版)》是一本深入解析Oracle数据库查询语言的专业书籍,由Oracle ACE和OakTable团队的专家共同撰写,集成了他们的丰富经验和专业知识。这本书旨在帮助读者掌握Oracle SQL的高级技巧,提升在...

Global site tag (gtag.js) - Google Analytics