On Sun, May 8, 2016 at 7:45 PM, dandl <david at andl.org> wrote:
> Just to add to the below:
>
> S# | SNAME | STATUS | CITY
> -------------------------------
> S1 | Smith | 20 | London
> S2 | Jones | 10 | Paris
> S3 | Blake | 30 | Paris
> S4 | Clark | 20 | London
> S5 | Adams | 30 | Athens
>
> SELECT DISTINCT "CITY" FROM "S" GROUP BY "CITY" ORDER BY "S#" ASC ;
>
> CITY
> ------
> Paris
> London
> Athens
>
> I don't find it easy to explain this result.
>
My guess based on the available data is that, since you don't specify which
"S#" you want associated with each city, it is picking the max of each
(coincidentally). If you want the minimum S# value, this seems to work:
select distinct city from s group by city order by min("S#") asc;
I'm not sure if that *should* work per "standard" SQL, but it does with
SQLite. I'd have expected something like this to be necessary:
select city, min("S#") as x from s group by city order by x asc;
And if you only want the city:
select city from (select city, min("S#") as x from s group by city order by
x asc);
But I'm not a SQL master.
Distinct used with group by seems redundant, but again, I might just not
understand how they are useful together.
--
Scott Robison