2016-07-22 25 views
2

我發現,當直接使用order-by的時候,它沒問題。子查詢中的「ORDER BY」 - 在MonetDB中不可用?

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被設計成這樣,或者它是一個錯誤?

回答

1

SQL符合要求的DBMS不應該讓ORDER BY子查詢,因爲它違背一個關係數據庫管理系統的概念模型。請參閱:

Is order by clause allowed in a subquery

瞭解詳情。然而,一種解決方法是使用窗口函數,其中MonetDB爲does support。具體而言,在你的子查詢的,而是說,

SELECT c1 FROM t1; 

可以

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

,現在你有內部查詢結果提供給外部查詢的相對順序。