On Fri, May 4, 2012 at 9:20 AM, Richard Hipp <d...@sqlite.org> wrote:
>>         Queries of the form: "SELECT max(x), y FROM table" returns the
>> value of y on the same row that contains the maximum x value.
>>
>> Is that standard SQL behavior?  I'd have expected that to return one row
>> for every row in the table.  To get the behavior described above, I'd use
>> "SELECT x, y FROM table WHERE x = (SELECT max(x) FROM table)".
>
> It is definitely NOT standard behavior.  The standard behavior is
> undefined.  Or (with many SQL engines) it will throw an error if you have a
> term in the result set that is not part of an aggregate function or an
> element of the GROUP BY clause.  But lots of newbies expect SQL to work as
> described in the 3.7.11 release comments, and we used to get support
> questions because it did not.  And so rather than continue to answer the
> questions over and over, I figured it would be easier to tweak SQLite to
> reliably do what newbies expect.  I never anticipated that this change
> would be so controversial or confusing.

This is very clever.  I'm not sure that an informative error message
wouldn't have been better, but I think you made the right choice given
SQLite3's previous behavior.  A pragma by which to cause SQLite3 to
return an error instead might be useful, but then, it's SQL_Lite_.

Is there any way to define aggregate functions that pick a row for
providing column values in non-aggregate expressions?  E.g., you could
have a median() or mode(), no?  I don't think this is important, am
just curious.

Nico
--
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to