[英]“ORDER BY” in subquery - not avaliable in MonetDB?
我發現直接使用order-by時可以。
SELECT t0."D" AS fd,
SUM(t0."SD") AS top
FROM "mock_table_1" AS t0
GROUP BY t0."D"
ORDER BY top ASC
LIMIT 10
但是在子查詢中使用它時,會報告語法錯誤。
SELECT * FROM (
SELECT t0."D" AS fd,
SUM(t0."SD") AS top
FROM "mock_table_1" AS t0
GROUP BY t0."D"
ORDER BY top ASC
LIMIT 10
)
這是錯誤消息。
syntax error, unexpected ORDER, expecting UNION or EXCEPT or INTERSECT or ')' in: "select t0."A" as d0,
所以,我想知道monetdb是設計成這樣還是一個bug?
這是預期的行為。 子查詢中不允許使用offset,limit和order by
https://www.monetdb.org/pipermail/users-list/2013-October/006856.html
符合SQL的DBMS不應在子查詢中允許ORDER BY,因為它與關系DBMS的概念模型相矛盾。 看到:
有關詳細信息。 但是,一種解決方法是使用MonetDB 支持的 Window Functions。 具體來說,在您的子查詢中,而不是說
SELECT c1 FROM t1;
您可以
SELECT c1, ROW_NUMBER() OVER () as rownum from t1;
現在,您可以將內部查詢結果的相對順序用於外部查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.