我似乎无法找到回答以下查询的方法。我正在使用 SQL Developer
我需要找出 2007 年申请者总数排名前十的机构是哪些。以下是我尝试过的命令:
select i.instid, i.instname, i.insttype,sum(f.TotalNumberApplicants)as TotalNumberofApplicants, f.year
from INSTITUTION_DIM i, FACT f
where i.INSTID = f.INSTID
and year = 2007
order by f.TOTALNUMBERAPPLICANTS
group by i.INSTID,i.INSTNAME,i.INSTTYPE,f.YEAR
limit 10;
Run Code Online (Sandbox Code Playgroud)
我不断收到此错误:
ORA-00933: SQL 命令未正确结束 00933.00000 - “SQL 命令未正确结束”*原因:
*操作:行:10 列:1 处出错
有任何想法吗??
这里可能有些混乱。也许值得花一些时间来澄清这一点?
如今,Oracle 公司同时拥有Oracle 数据库和MySQL。这两个产品是不同的数据库服务器。尽管有一些相似之处,但它们的 SQL 实现支持的语法和功能却截然不同。限制查询返回的行数的方法就是其中之一。
从docs.oracle.com 上的一些文档来看,它们实际上与 MySQL 相关,这一事实在某种程度上维持了这种混乱。也许你掉进了这个陷阱?
为了完整起见,这里介绍如何限制 Oracle 和 MySQL 返回的行数:
对于 Oracle,一种方法是使用伪列ROWNUM:
SELECT * FROM (
SELECT ....
GROUP BY ...
ORDER BY ...
)
WHERE ROWNUM <= 10
-- Yes, you need a subquery here. But Oracle is smart enough
-- to optimize that statement
Run Code Online (Sandbox Code Playgroud)
从 Oracle 12c 开始,您可以使用该FETCH子句
(直接来自文档,因为我没有足够幸运测试过 Oracle 12)
SELECT ...
GROUP BY ...
ORDER BY ...
FETCH FIRST 10 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,MySQL至少从 MySQL 3.23 开始就支持该LIMIT子句。也许甚至更早?无论如何,这意味着很久以前。
SELECT ...
GROUP BY ...
ORDER BY ...
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20442 次 |
| 最近记录: |