Почему SQL / RDBMS не поддерживают применение агрегатной функции в подзапросе? - PullRequest
0 голосов
/ 14 марта 2019

Оператор наподобие MAX((SELECT Price FROM Products WHERE Category = 'Food')) кажется мне совершенно логичным (набор результатов подзапроса эквивалентен ссылке на столбец), но почему это обычно не поддерживается SQL и RDBMS?

Есть ли какие-либо технические трудности для разбора такого синтаксиса?

1 Ответ

1 голос
/ 14 марта 2019

Кажется, достаточно просто переместить MAX() в подзапрос:

(SELECT MAX(Price) FROM Products WHERE Category = 'Food')

Что касается , почему ваша версия не работает. , , ну, разработчики SQL могут знать. В общем случае возвращающие множество подзапросы разрешены только в нескольких контекстах. От руки я могу думать о:

  • IN / NOT IN
  • EXISTS / NOT EXISTS
  • оператор, за которым следует ANY / SOME / ALL
  • FROM пункты

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

...