当前位置: 首页 > 面试题库 >

Oracle中一列的前n个不同值

谭泉
2023-03-14
问题内容

我正在使用一个查询,查询的一部分获得某一列的前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

我正在尝试了解是否有更正确的方法来执行此操作,因为实际查询很大,并且用看起来几乎相同的子查询来复制它的大小,只是为了获得前三名很难并且难以理解/修改。

在Oracle中,是否有更好的方法来处理一列的前3个不同值?


问题答案:

是的,您可以使用dense_rank并避免重复的代码:

select col 
  from (select col, dense_rank() over (order by col) rnk from tbl)
  where rnk <= 3

演示



 类似资料:
  • 问题内容: 我有一个具有名称,值,时间列的Oracle表。基本上,该表用于记录目的,用于存储对特定名称所做的更改,以前的值是什么以及更改时间。 我需要制定一个查询来获取特定名称的前n个更改,并且输出应具有表中的所有名称。任何帮助/建议吗? 编辑: 我需要选择11月1日,10月31日,8月31日和Ravi的Harish的详细信息。 问题答案: 这是你所追求的吗? 我的测试设置: 这是查询:

  • 问题内容: | uId | title | amount | makers | widgets | 1 richard 998 xcorp sprocket 2 swiss 995 ycorp framitz 3 ricky 90 zcorp flobber 4 ricky2 798 xcorp framitz 1 lilrick 390 xcorp sprocket 1 brie 200 mco

  • 问题内容: 我有一个程序尝试为每个特工在表格中插入样本,每个特工的样本数量因某些计算而异 我到这里的错误是 消息4115,级别15,状态1,第4 行在TOP子句的参数中不允许引用列“ samplesize”。此处仅允许引用外部作用域的列或独立的表达式和子查询。 有没有解决方法? 任何帮助表示赞赏。 提前致谢。 问题答案: 您可以用来做基本上相同的事情: 您也许可以简化一下,但是我不知道它是否来自d

  • 我的问题是我无法思考如何编码,因为n<=50和a,b<=16,所以我不确定有多少个不同的数字,如果有16个数字,那么我必须找到16个数字的所有可能的组合,所以指导我通过这个。

  • 问题内容: 我是Oracle的新手,我正在尝试做一些不寻常的事情。给定此表和数据,我需要选择每一行,并复制DupCount大于1的行。 所需结果: 如果通过单个select语句无法做到这一点,那么对存储过程的任何帮助将不胜感激。 问题答案: 您可以使用分层查询来做到这一点: SQL小提琴 查询1 : 结果 :

  • 问题内容: 我想在下表中使用“ distinct”,但仅在“ PlayerID”列上使用。这是我目前所拥有的: 这就是我想要的,以便显示每个“ PlayerID”的最高“ StartDate”,而忽略下一行: 当前的SQL: 这是一个Oracle数据库。 提前致谢。 问题答案: 几点… 除非您使用联接和过滤出行,否则不需要这些表。我把它们留在这里了;您可以根据需要将它们重新添加。 Mark Tic