简单选择最小值的所有列 - >错误

时间:2018-03-18 15:24:16

标签: sql oracle min

我想要一个查询来根据表中列的最低值来获取元组的所有列:

file

由于某种原因,这会引发错误:

  

ORA-00923:未找到FROM关键字

这是我认为来自SQLite的基本内容,但Oracle对我来说是新的。

我创建了一个像:

的表
SELECT *, MIN(Opened) FROM Account

如果我输入任何其他列名称(例如CREATE TABLE Account ( Act_id INTEGER, Opened DATE, Balance NUMBER(10,2), CONSTRAINT act_pk PRIMARY KEY(act_id) ) ),则会出现另一个错误:

  

ORA-00937:不是单组组功能

根据this教程,至少SELECT balance, MIN(opened)符号在Oracle中。而*本身就是有效的。我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

关于您学习的语法,SQLite“已损坏”。在这种情况下,它是唯一返回最小或最大行的数据库。有简单的方法可以做到这一点,所以我不确定为什么设计师觉得需要包含那个特定的(错误的)功能。

如果您想要一行,只需使用order byrownum

select a.*
from (select a.*
      from account a
      order by opened asc
     ) a
where rownum = 1;

如果您希望所有行都具有最小值,请使用子查询:

select a.*
from account a
where a.opened = (select min(a2.opened) from account a2);

答案 1 :(得分:0)

当您要求BALANCE和MIN(OPENED)时,您需要指定GROUP BY,如

SELECT BALANCE, MIN(OPENED)
  FROM ACCOUNT
  GROUP BY BALANCE

之前你曾说过“我想要一个查询来根据表中列的最低值来获取元组的所有列”。我对此的解释是你需要一个WHERE子句:

SELECT *
  FROM ACCOUNT
  WHERE OPENED = (SELECT MIN(OPENED) FROM BALANCE)

或许你的意思是你想要ACCOUNT的所有列,以及整个表的最小值OPENED。在那种情况下,我建议一个CROSS JOIN

SELECT *
  FROM ACCOUNT
  CROSS JOIN (SELECT MIN(OPENED) AS MIN_OPENED FROM ACCOUNT)

祝你好运。