【问题标题】:Select nth row Oracle SQL [duplicate]选择第 n 行 Oracle SQL [重复]
【发布时间】:2020-07-27 19:57:50
【问题描述】:

我正在尝试从以下查询访问第三行:

SELECT *
FROM (SELECT
  OFFENSEDESC,
  COUNT(*) AS num
FROM
  CRIMEPROFILE

GROUP BY
  OFFENSEDESC
ORDER BY num DESC) o
WHERE rownum = 3

但是,它不返回任何行,我不确定为什么会这样,感谢任何帮助。注意:ORACLE SQL

【问题讨论】:

  • 可能,子查询返回少于 3 行。您是否尝试单独运行子查询以查看它返回的内容?
  • 不,它返回 68 行,奇怪的是,rownum >= 3 有效,但我只想要第 3 行。此外,无论我选择什么索引 (rownum = n),它都不会返回任何行。
  • 你试过rownumber()吗?
  • OFFSET 2 ROWS FETCH NEXT 1 ROWS 只有这个技巧
  • 请参阅 how to select even records from a table in oracle? 以了解为什么 ROWNUM = 3 不起作用(或者,在这种情况下,为什么 MOD( ROWNUM, 2 ) = 0 不起作用;但该解释同样适用于 3而不是偶数行)。解决方案是您需要首先ORDER BY,然后生成ROWNUM,最后过滤并在单独的嵌套子查询中执行每个步骤。

标签: sql oracle pagination rownum


【解决方案1】:

试试这个

SELCT
    OFFENSEDESC,
    num
from
(
    SELECT
      OFFENSEDESC,
      COUNT(*) AS num,
      ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) as rnk
    FROM
      CRIMEPROFILE
    GROUP BY
      OFFENSEDESC
) val
WHERE rnk = 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多