2016-07-22 14 views
2

Ich habe festgestellt, dass bei der Verwendung von order-by es in Ordnung ist."ORDER BY" in Unterabfrage - nicht verfügbar in 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 

Bei Verwendung in einer Unterabfrage wird jedoch ein Syntaxfehler gemeldet.

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 
) 

Hier ist die Fehlermeldung.

Also, ich frage mich, ob monetdb so konzipiert ist, oder es ist ein Fehler?

Antwort

1

SQL-konformer DBMSes nicht ORDER ermöglichen soll BY in Unterabfragen, weil es das konzeptionelle Modell eines relationalen DBMS widerspricht. Siehe:

Is order by clause allowed in a subquery

für weitere Einzelheiten. Ein Weg um dies zu tun ist jedoch, Fensterfunktionen zu verwenden, die MonetDB does support. Insbesondere in der Unterabfrage statt, sagen wir,

SELECT c1 FROM t1; 

können Sie

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

und jetzt haben Sie die relative Reihenfolge der inneren Abfrageergebnis zur Verfügung zu der äußeren Abfrage.