我正在使用一个查询,其中一部分获取特定列的前 3 个。
它创建该列的一个不同的子查询,限制为 3 行,然后将这些行过滤到主查询以执行前 3 项操作。
WITH subquery AS (
SELECT col FROM (
SELECT DISTINCT col
FROM tbl
) WHERE ROWNUM <= 3
)
SELECT col
FROM tbl
WHERE tbl.col = subquery.col
所以原来的表是这样的:
col
-----
a
a
a
b
b
b
c
d
d
e
f
f
f
f
并且查询返回该列的前 3 行(而不是前 3 行,后者只会a
):
col
-----
a
a
a
b
b
b
c
我正在尝试了解是否有更正确的方法来执行此操作,因为真正的查询很大,并且使用看起来几乎相同的子查询复制其大小只是为了获得前 3 个查询,这很难使用和理解/修改。
有没有更好的方法来获取 Oracle 中一列的前 3 个不同值?
是的,您可以使用dense_rank
并避免重复的代码:
select col
from (select col, dense_rank() over (order by col) rnk from tbl)
where rnk <= 3
demo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)