簡體   English   中英

子查詢中的“ ORDER BY”-在MonetDB中不可用?

[英]“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的概念模型相矛盾。 看到:

子查詢中是否允許order by子句

有關詳細信息。 但是,一種解決方法是使用MonetDB 支持的 Window Functions。 具體來說,在您的子查詢中,而不是說

SELECT c1 FROM t1;

您可以

SELECT c1, ROW_NUMBER() OVER () as rownum from t1;

現在,您可以將內部查詢結果的相對順序用於外部查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM