【问题标题】:Oracle SQL Developer how to get top value [duplicate]Oracle SQL Developer如何获得最高价值[重复]
【发布时间】:2015-01-06 01:57:21
【问题描述】:

我将列从最大重复次数排序到最小值。但我只想获得最高价值。重复次数最多的值。

这是代码:

 SELECT foreign_key
 FROM all_person
 GROUP BY foreign_key
 ORDER BY COUNT(*) DESC;

这就是我得到的:

foreign_key
--------------
        10 
         9 
         2 
         4 
         8 
         3 
         7 
         6 
         1 
         5

我只想得到值 10(在这个例子中)。 我经常看到人们使用 LIMIT,但如果我像这样使用 LIMIT,我会得到错误:

ORDER BY COUNT(*) DESC LIMIT 1;

这是错误:

SQL Error: ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"

【问题讨论】:

  • LIMIT 是如何在 MySQL 中执行此操作但在 Oracle 中不起作用

标签: sql oracle


【解决方案1】:

您可以使用ROWNUM:

SELECT foreign_key FROM (
   SELECT foreign_key
     FROM all_person
    GROUP BY foreign_key
    ORDER BY COUNT(*) DESC
) WHERE rownum = 1;

这是最快的方法,但可能不适用于更复杂的查询。

【讨论】:

  • 是否可以在 Oracle 中创建变量以将数字 10 放入某个变量中? @大卫费伯
  • 这是一个相当宽泛的问题,你能说得更具体点吗?
  • 这取决于你在做什么。您可以创建一个包和过程/函数来返回该值。你也可以声明一个变量:SELECT foreign_key INTO variable_name FROM...
【解决方案2】:

您可以在 where 子句中使用 ROWNUM:

SELECT foreign_key
FROM
(
 SELECT foreign_key
 FROM all_person
 GROUP BY foreign_key
 ORDER BY COUNT(*) DESC
)
WHERE ROWNUM = 1;

【讨论】:

  • 是否可以在 Oracle 中创建变量以将数字 10 放入某个变量中? @gmiley
【解决方案3】:

rownum 方法已经被描述过,它通常可以工作。在 Oracle 12+ 中,您可以使用fetch first 1 row only:

SELECT foreign_key
FROM all_person
GROUP BY foreign_key
ORDER BY COUNT(*) DESC
FETCH FIRST 1 ROW ONLY;

您没有指定您正在使用的 Oracle 版本。如果是最新的,那么这将起作用。这也是标准的,适用于其他一些数据库。

【讨论】:

  • 是否可以在 Oracle 中创建变量以将数字 10 放入某个变量中? @戈登林诺夫
猜你喜欢
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 2021-02-21
  • 1970-01-01
  • 2017-04-10
相关资源
最近更新 更多