续上一篇总结:
3.6 查询各科名次(分区),排名前两位的信息,如:新闻表点击率在前两条的新闻或商品销售在前10名的商品等
--6.查询各科名次(分区),排名前两位的信息,如:新闻表点击率在前两条的新闻或商品销售在前10名的商品等
select *
from (select t.s_id 学号,
t.s_name 姓名,
t.sub_name 科目,
t.score 成绩,
dense_rank() over(partition by t.sub_name order by score desc nulls last) 名次
from t_score t) a
where a.名次 <= 2;
查询结果:
学号 |
姓名 |
科目 |
成绩 |
名次 |
4 |
杨过
|
JAVA |
90.00 |
1 |
4 |
杨过
|
Oracle |
77.00 |
1 |
2 |
李四
|
Oracle |
77.00 |
1 |
3 |
张三丰
|
Oracle |
0.00 |
2 |
5 |
mike
|
c++ |
80.00 |
1 |
2 |
李四
|
数学 |
80.00 |
1 |
1 |
张三
|
数学 |
0.00 |
2 |
3 |
张三丰
|
体育 |
120.00 |
1 |
1 |
张三
|
语文 |
80.00 |
1 |
2 |
李四
|
语文 |
50.00 |
2 |
3.7 查询各同学总分
--7.查询各同学总分
select t.s_id 学号,
t.s_name 姓名, /*t.sub_name 科目, t.score 成绩, */
sum(nvl(t.score, 0)) 总分
from t_score t
group by t.s_id, t.s_name;
查询结果:
学号 |
姓名 |
总分 |
3 |
张三丰
|
130 |
5 |
mike
|
80 |
2 |
李四
|
207 |
4 |
杨过
|
167 |
1 |
张三
|
80 |
3.8 查询各同学总分名次
--8.查询各同学总分名次
select a.学号, a.姓名,rank() over(order by a.总分 desc) 名次
from (select t.s_id 学号,
t.s_name 姓名, /*t.sub_name 科目, t.score 成绩, */
sum(nvl(t.score, 0)) 总分
from t_score t
group by t.s_id, t.s_name) a;
查询结果:
学号 |
姓名 |
名次 |
2 |
李四
|
1 |
4 |
杨过
|
2 |
3 |
张三丰
|
3 |
5 |
mike
|
4 |
1 |
张三
|
4 |
分享到:
相关推荐
### Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数详解 #### 一、OVER (PARTITION BY ..) 概述 在Oracle数据库中,`OVER (PARTITION BY ...)` 是一种非常强大的功能,它允许用户在数据集上进行窗口操作。这在...
在本实例中,我们将详细探讨Oracle中的Rank()函数及其使用方法。 Rank()函数的基本用法是在`OVER()`子句中,通过指定`ORDER BY`来决定排名依据。其语法如下: ```sql rank() over (order by 排序字段 [asc|desc]) ...
### Oracle开发中的OVER函数详解 #### 一、Oracle分析函数简介 在Oracle数据库开发中,分析函数是一类非常强大的工具,主要用于实现复杂的查询需求,尤其是在处理大量数据时,能够提供高级的数据汇总、排序和筛选...
### Oracle分析函数详解 #### 一、Oracle分析函数概述 Oracle分析函数是在处理大量数据时进行高级数据分析的强大工具,主要用于在线分析处理(OLAP)场景。这类函数可以在单个SQL语句中对数据进行复杂的计算,包括...
在Oracle数据库中,`RANK()`函数是一种窗口函数,它被用于在一组数据中为每一行分配一个唯一的排名。此函数特别适用于需要基于特定条件对数据进行排序并为每个记录分配一个名次的情况。在本篇文章中,我们将深入探讨...
### Oracle分析函数详解与应用实例 #### 引言 Oracle分析函数自Oracle 8i版本引入以来,为数据库用户提供了强大的数据分析能力。相比于传统的自联接、子查询或存储过程等复杂操作,分析函数能够以更简洁、高效的...
#### 二、Oracle分析函数简单实例 在理解分析函数之前,我们先通过一个简单的例子来感受一下它的基本用法: 假设有一个员工表`employees`,包含字段`employee_id`, `salary`, 和`department_id`。现在我们需要找出...
### Oracle分析函数详解 #### 一、Oracle分析函数概述 Oracle分析函数,也称为窗口函数,是一种高级查询技术,主要用于处理复杂的数据分析需求,尤其是在OLAP(在线分析处理)场景中,它们能够对数据进行多层次的...
### Oracle分析函数详解 #### 一、概述 Oracle分析函数是一种强大的工具,它允许用户对数据进行复杂的查询和分析操作,这些操作远远超出了传统SQL的功能。与聚合函数不同,分析函数可以为每一组返回多行结果,这...
此外,还可以使用其他分析函数,如`RANK()`或`DENSE_RANK()`,它们与`ROW_NUMBER()`类似,但处理相同值的方式略有不同。`RANK()`在遇到相等值时会跳过一些编号,而`DENSE_RANK()`则不会留下编号空缺。 总的来说,...
### Oracle Row_Number 函数详解 #### 一、Row_Number 基础概念 在Oracle数据库中,`ROW_NUMBER()`函数是一种窗口函数,主要用于为查询结果中的每一行分配一个唯一的序列号。这一特性使得它在处理分组数据时非常...
### Oracle SQL基础知识详解 #### 一、书籍简介与目标读者 《Beginning Oracle SQL》是一本由Lex de Haan、Tim Gorman、Karen Morton、Daniel Fink和Inger Jorgensen共同编写的关于Oracle SQL的基础教程。该书由...
ROW_NUMBER() OVER (PARTITION BY CID ORDER BY Score DESC) AS rank FROM SC ) AS SC JOIN Student S ON SC.SID = S.SID JOIN Course C ON SC.CID = C.CID WHERE SC.rank ORDER BY C.CID ASC, SC.Score DESC; ``...