ORDER BY в подзапросе — недоступен в 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 для этого, или это ошибка?


person luochen1990    schedule 22.07.2016    source источник


Ответы (2)


это ожидаемое поведение. смещение, ограничение и порядок не допускаются в подзапросах

https://www.monetdb.org/pipermail/users-list/2013-October/006856.html

person Anthony Damico    schedule 25.07.2016

SQL-совместимые СУБД не должны разрешать ORDER BY в подзапросах, потому что это противоречит концептуальной модели реляционной СУБД. Видеть:

Допускается ли предложение order by в подзапросе

для деталей. Однако это можно обойти с помощью оконных функций, которые MonetDB поддерживает. В частности, в вашем подзапросе вместо, скажем,

SELECT c1 FROM t1;

Вы можете

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

и теперь у вас есть относительный порядок результатов внутреннего запроса, доступных для внешнего запроса.

person einpoklum    schedule 05.12.2017