Phil Florent <philflor...@hotmail.com> writes:
> A <grouping specification> of () (called grand total in the Standard) is 
> equivalent to grouping the entire result Table;

Yeah, I believe so.  Grouping by no columns is similar to what happens
if you compute an aggregate with no GROUP BY: the whole table is
taken as one group.  If the table is empty, the group is empty, but
there's still a group --- that's why you get one aggregate output
value, not none, from

regression=# select count(*) from dual where 0 = 1;
 count 
-------
     0
(1 row)

Thus, in your example, the sub-query should give

regression=# select 1 from dual where 0=1 group by grouping sets(());
 ?column? 
----------
        1
(1 row)

and therefore it's correct that

regression=# select count(*) from (select 1 from dual where 0=1 group by 
grouping sets(())) tmp;
 count 
-------
     1
(1 row)

AFAICS, Oracle and SQL Server are getting it wrong.

                        regards, tom lane


Reply via email to