Re: Final Patch for GROUPING SETS - unrecognized node type: 347

Поиск
Список
Период
Сортировка
От Andrew Gierth
Тема Re: Final Patch for GROUPING SETS - unrecognized node type: 347
Дата
Msg-id 87egvn8k0e.fsf@news-spur.riddles.org.uk
обсуждение исходный текст
Ответ на Re: Final Patch for GROUPING SETS - unrecognized node type: 347  (Tomas Vondra <tv@fuzzy.cz>)
Ответы Re: Final Patch for GROUPING SETS - unrecognized node type: 347  (Tomas Vondra <tv@fuzzy.cz>)
Список pgsql-hackers
>>>>> "Tomas" == Tomas Vondra <tv@fuzzy.cz> writes:
>> As for computing it all twice, there's currently no attempt to>> optimize multiple identical grouping sets into
multiple>>projections of a single grouping set result. CUBE(a,b,c,a) has>> twice as many grouping sets as CUBE(a,b,c)
does,even though all>> the extra ones are duplicates.
 
Tomas> Shouldn't this be solved by eliminating the excessiveTomas> ChainAggregate?  Although it probably changes
GROUPING(...),Tomas>so it's not just about removing the duplicate column(s) fromTomas> the CUBE.
 

Eliminating the excess ChainAggregate would not change the number of
grouping sets, only where they are computed.
Tomas> Maybe preventing this completely (i.e. raising an ERROR withTomas> "duplicate columns in CUBE/ROLLUP/...
clauses")would beTomas> appropriate. Does the standard says anything about this?
 

The spec does not say anything explicitly about duplicates, so they
are allowed (and duplicate grouping _sets_ can't be removed, only
duplicate columns within a single GROUP BY clause after the grouping
sets have been eliminated by transformation). I have checked my
reading of the spec against oracle 11 and MSSQL using sqlfiddle.

The way the spec handles grouping sets is to define a sequence of
syntactic transforms that result in a query which is a UNION ALL of
ordinary GROUP BY queries. (We haven't tried to implement the
additional optional feature of GROUP BY DISTINCT.) Since it's UNION
ALL, any duplicates must be preserved, so a query with GROUPING SETS
((a),(a)) reduces to:

SELECT ... GROUP BY a UNION ALL SELECT ... GROUP BY a;

and therefore has duplicates of all its result rows.

I'm quite prepared to concede that I may have read the spec wrong
(wouldn't be the first time), but in this case I require any such
claim to be backed up by an example from some other db showing an
actual difference in behavior.

-- 
Andrew (irc:RhodiumToad)



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Emre Hasegeli
Дата:
Сообщение: Re: Selectivity estimation for inet operators
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Adding a nullable DOMAIN column w/ CHECK