日期:2014-05-17  浏览次数:20821 次

关于分类统计前N条的问题
有个表记录的是用户名称和类型,现在想统计出每个类型下随机或者前50个人员的名称(不要用游标,一条语句实现,要用游标的话就不问了)

login_no           login_type

aaaa                     01
aa11                     01
abe                       02
445dd                   03
………………

还有个问题double的0和float的0有什么区别吗?
为啥double的0.00 <>   0.00呢?

------解决方案--------------------
用分析函数吧
------解决方案--------------------
使用row_number()查出各部门薪水最高的三个员工姓名、薪水,多于三个的只取三个。

SQL> select * from (
2 select deptno,row_number() over(partition by deptno order by sal desc) rw,ename,sal
3 from emp
4 )
5 where rw <=3;

DEPTNO RW ENAME SAL
---------- ---------- ---------- ----------
10 1 KING 5000
2 CLARK 2450
3 MILLER 1300

20 1 SCOTT 3000
2 FORD 3000
3 JONES 2975

30 1 BLAKE 2850
2 ALLEN 1600
3 TURNER 1500


已选择9行。

体会:row_number() 返回的主要是“行”的信息,并没有按照sal排名,如
20 1 SCOTT 3000
2 FORD 3000
scott与ford薪水一样多,ford前面的2仅仅是行数、记录条数的感念。