Насколько я знаю, это ограничение SQL. Подзапросы недопустимы в выражении COUNT
. Очевидно, (select * from producers)
- это подзапрос, поэтому он там не разрешен.
Я думаю, что ваше недоразумение заключается в том, что вы думаете, что вызовете функцию как COUNT(SELECT * FROM producers)
, тогда как в SQL это похоже на SELECT COUNT(*) FROM producers
.
Функции типа MAX
, MIN
, SUM
и COUNT
являются агрегатными функциями, что означает, что они принимают скалярный аргумент, но выполняются один раз для каждой строки, накапливая результаты на каждой итерации. Таким образом, SELECT MAX(column) FROM table
выполняет функцию MAX
один раз для каждой строки в table
, в то время как вы можете подумать, что MAX
выполняется один раз и передается в каждую строку в table
.
Сравните это с такими операторами, как IN
, EXISTS
, ANY
и ALL
, которые имеют подзапрос в качестве аргумента. Они эффективно передают все результаты своего подзапроса каждый раз, когда их вызывают.