Army wrote:
Bernt M. Johnsen wrote:
[...]
// Doesn't work but seems like it could/should based on above queries...

ij> select sin(i) from t1 group by sin(i);
ERROR 42Y30: The SELECT list of a grouped query contains at least one invalid expression. If a SELECT list has a GROUP BY, the list may only contain valid grouping expressions and valid aggregate expressions.
[...]

To me it seems natural that this one doesn't work. To group by double
or float values is not reasonable.

Thank you for the reply, Bernt. Perhaps this is the detail I was missing. When you say "is not reasonable", can you elaborate on why that's the case (excuse me if that's a naive question)? Is it because the types are imprecise?

I did notice that following works:

ij> create table td (d double);
0 rows inserted/updated/deleted
ij> insert into td values 2.08, 3.08;
2 rows inserted/updated/deleted
ij> select d from td group by d;
D
----------------------
2.08
3.08

If it is not reasonable to group by a double, then should this query work? Or should we be throwing the same error that we throw for "sin(i)"?

No, you are correct Army, the grouping by functions does not work because at the moment Derby assumes all functions are non-deterministic. Grouping by DOUBLE should be allowed since they can be compared. It's probably not advisable, but Derby's SQL should allow it.

Dan.

Reply via email to