我想要一个查询来根据表中列的最低值来获取元组的所有列:
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中。而*
本身就是有效的。我错过了什么吗?
答案 0 :(得分:0)
关于您学习的语法,SQLite“已损坏”。在这种情况下,它是唯一返回最小或最大行的数据库。有简单的方法可以做到这一点,所以我不确定为什么设计师觉得需要包含那个特定的(错误的)功能。
如果您想要一行,只需使用order by
和rownum
:
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)
祝你好运。