记Oracle Sql学习笔记

(1)想要每门科目的前3名的分数

TABLE:A (科目,分数)
  
  数学,80
  语文,70
  数学,90
  数学,60
  数学,100
  语文,88
  语文,65
  语文,77


  想要的结果是:
  数学,100
  数学,90
  数学,80
  语文,88
  语文,77
  语文,70 

  那么语句就这么写:  
  select * from (select rank() over(partition by 科目 order by 分数 desc) rk,a.* from a) t
  where t.rk<=3;

(2)group by 和 partition by

总结一下group by和partition by的用法
group by是对检索结果的保留行进行单纯分组,一般总爱和聚合函数一块用例如AVG(),COUNT(),max(),main()等一块用。

partition by虽然也具有分组功能,但同时也具有其他的功能。
它属于oracle的分析用函数。
借用一个勤快人的数据说明一下:

sum()   over   (PARTITION   BY   ...)   是一个分析函数。   他执行的效果跟普通的sum   ...group   by   ...不一样,它计算组中表达式的累积和,而不是简单的和。  

posted on 2012-07-04 10:44  Panda_Luffy  阅读(155)  评论(0编辑  收藏  举报

导航