2016-07-22 7 views
2

私は、オーダーバイを直接使用すると、それは問題ないことを発見しました。サブクエリで "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

に許可されていない、それは、リレーショナルDBMSの概念モデルと矛盾するため、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; 

、今、あなたは外側のクエリで使用可能な内部クエリ結果の相対的な順序を持っています。

関連する問題