Почему в SQL Server я не могу этого сделать:
select sum(count(id)) as 'count'
from table
Но я могу сделать
select sum(x.count)
from
(
select count(id) as 'count'
from table
) x
Разве это не одно и то же? Как я должен думать об этом, чтобы понять, почему первый блок кода не разрешен?
GROUP BY
) всегда возвращает ровно одну строку. При каких обстоятельствах имеет смысл применить агрегирование к этой строке? Векторный агрегат возвращает одну строку для каждой группы. Хотя иногда может быть полезно применить другое агрегирование к результату, вам понадобится другоеGROUP BY
, примененное к двум агрегатам, чтобы это было полезно. - person Martin Smith   schedule 26.05.2012<value expression>
, просто содержащийся в<set function specification>
, не должен содержать<set function specification>
или<subquery>
- person Martin Smith   schedule 28.05.2012aggregate(aggregate(...))
невозможно, потому что нет возможности указатьGROUP BY ... OVER (GROUP BY ...)
. Т.е. если мы хотим вкладывать агрегаты, мы также должны иметь возможность вкладывать GROUP BY, что нам не разрешено (пока?). Вы говорите, что в ваших примерах нет GROUP BY? Но есть, а именноGROUP BY ()
, что всегда подразумевается, если не указано явно. - person Andriy M   schedule 30.05.2012