>We can observe GROUP BY works ASCending only as of now. Why it can't work >DESCending to avoid ordering, that's a different question. >From https://www.sqlite.org/lang_select.html we can observe that >GROUP BY takes an expr on the RHS, while ORDER BY takes an expr >followed by optional COLLATE and ASC/DESC terms.
The GROUP BY clause does not imply ordering. The fact that the output is ordered is an implementation detail -- the grouping could be implemented by a hash table, in which case the output would be ordered by hash value, for instance. All that the expression in a GROUP BY does is determine the groupings, and therefore the expression is limited to a comparison compatible expression. For example, you can GROUP BY x COLLATE NOCASE which implies that the groups are formed using case insensitive comparisons of x. The ORDER BY clause determines the output ordering. You will note that if you do the following: create table x(x,y); create index ix on x(x desc, y); select x, someaggregate(y) from x group by x order by x desc; then ix will be used as a covering index (which is good) however the group by x is treated as an ordering expression, not as simply a grouping expression. In fact the code that implements the group by does indeed (perhaps erroneously) treat the group by expression as implying order, since it will traverse the covering index in reverse order so that the output from GROUP BY is in ascending order, and add an extra sort to do the ORDER BY. That means the GROUP BY code generator is already capable of traversing the selected index in reverse order when necessary. It appears that the optimizer however does not recognize that the "desc" attribute from the order by can be "pushed down" into the GROUP BY (which really is ordering as an implementation detail) thus eliminating the ORDER BY processing entirely. Note that you cannot specify that the GROUP BY is ordering -- it will not accept the ASC or DESC keywords (which is correct), and this should not be changed, however, treating it as being ordering when it is not might perhaps be a defect ... _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users