续上一篇总结:
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中rank,over partition函数的用法,希望对大家有所帮助。
主要介绍了Oracle查询中OVER (PARTITION BY ..)用法,内容和代码大家参考一下。
Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数(转载),这个命令很实用,对于分析人员经常用到。
介绍rank() over()分析函数和 row_number() over 的使用实例及其异同点
Row_number() over()、rank() over()和dense_rank()over()函数的使用 Select * from (select name,class,s,rank() over(partition by class order by s desc) mm from t2) where mm=1; 说明: 1.在求第一名成绩的...
–已知:两种排名方式(分区和不分区):使用和不使用partition –两种计算方式(连续,不连续),对应函数:dense_rank,rank ·查询原始数据:学号,姓名,科目名,成绩 select * from t_score S_ID S_NAME SUB_...
第六篇 著名函数之分析函数 1、AVG([DISTINCT|ALL] expr) OVER(analytic_clause) 计算平均值。 例如: --聚合函数 SELECT col, AVG(value) FROM tmp1 GROUP BY col ORDER BY col; --分析函数 SELECT col, AVG(value)...
ORACLE数据库中PARTITION的用法[文].pdf
1、 结构:聚合函数()over( partition by 字段1,字段2,字段3 order by 字段 desc/asc range between 数值/date preceding/flowing and 数值/date preceding/flowing) 聚合函数可以是:sum,count,avg,max,min,...
partition by关键字是分析性函数的一部分,partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,本文给大家介绍SQLServer中Partition By及row_number 函数使用详解,需要的朋友参考下
ROW_NUMBER () OVER([partition_clause] order_by_clause) dense_rank在做排序时如果遇到列有重复值,则重复值所在行的序列值相同,而其后的序列值依旧递增,rank则是重复值所在行的序列值相同,但其后的序列值从...
深入探讨oracle partition的机制与实现
sum(sal) over (partition by deptno order by ename) 按部门“连续”求总和 sum(sal) over (partition by deptno) 按部门求总和 sum(sal) over (order by deptno,ename) 不按部门“连续”求总和 sum(sal) over () ...
函数名称 ([参数]) OVER (analytic_clause) analytic_clause包含:[partition 子句][ order 子句 [window子句]] Partition 子句:Partition by exp1[ ,exp2]... Partition没啥说的,功能强大参数少,主要用于...
3、PERCENT_RANK() OVER([partition_clause] order_by_clause) 与CUME_DIST类似,本函数返回分组序列中各行在分组序列的相对位置。其返回值也是介于0到1之间,不过其起始值始终为0而终结值始终为1。 例如:SELECT ...
rank ( ) over ([partition by col] order by col ) dense_rank ( ) over ([partition by col] order by col ) rownumber ( ) over ( [partition by col] order by col ) rank() 是排名的函数,该函数组内...
Oracle9i通过引入列表分区(List Partition),使得当前共有4种分区数据的方法,文中分别介绍了这四种分区方法:范围分区、Hash分区、复合分区、列表分区。
Oracle Partition分区详细总结.pdf