请教各位神侠,
我想实现一个自定义函数,函数类型为 f_max(列名 column_name, 序号 val),
要求此函数实现 求得列名为 column_name 的这个列的第 val个最大的值。
比如有一个表如下
CREATE TABLE t (id VARCHAR2(2), n INT);
INSERT INTO t VALUES ('A',25);
INSERT INTO t VALUES ('A',30);
INSERT INTO t VALUES ('A',55);
INSERT INTO t VALUES ('B',77);
INSERT INTO t VALUES ('C',7176);
INSERT INTO t VALUES ('C',5428);
INSERT INTO t VALUES ('C',7820);
要求
select f_max(n,1) from t 的结果为 7820, 对应为最大的 n,
select f_max(n,2) from t 的结果为 7176, 对应为第二个最大的 n,
...
如能帮助,万分感谢!!!
------解决方案--------------------
- SQL code
--不用自己定义吧!--sql1: SELECT N,row_number() over(ORDER BY n DESC) rn FROM t--result:7820 17176 25428 377 455 530 625 7--sql2 SELECT N FROM ( SELECT N,row_number() over(ORDER BY n DESC) rn FROM t) WHERE rn=1--result7820 SELECT N FROM ( SELECT N,row_number() over(ORDER BY n DESC) rn FROM t) WHERE rn=2--result:7176
------解决方案--------------------
楼主要实现的功能应该不能在自定义聚合函数中实现,因为首先要把所有值排序才能得到第N大的值,这就需要多次循环,而聚合函数只有一次循环.
------解决方案--------------------
实测请参考:
查询所有:
查询第一大的
查询第三大的
------解决方案--------------------
row_number() over(ORDER BY n DESC)