Ответ 1
Это простая aggegation:
SELECT continent, MIN(name) AS name
FROM world
GROUP BY continent
ORDER by continent
Я начал изучать MySQL.
Вот таблица world
:
+-------------+-----------+---------+
| name | continent | area |
+-------------+-----------+---------+
| Afghanistan | Asia | 652230 |
| Albania | Europe | 2831741 |
| Algeria | Africa | 28748 |
| ... | ... | ... |
+-------------+-----------+---------+
Мне нужно:
Перечислите каждый континент и название страны, которая поступает первым в алфавитном порядке
Результат SELECT должен быть:
+---------------+---------------------+
| continent | name |
+---------------+---------------------+
| Africa | Algeria |
| Asia | Afghanistan |
| Caribbean | Antigua and Barbuda |
| Eurasia | Armenia |
| Europe | Albania |
| North America | Belize |
| Oceania | Australia |
| South America | Argentina |
+---------------+---------------------+
Это простая aggegation:
SELECT continent, MIN(name) AS name
FROM world
GROUP BY continent
ORDER by continent
Если это упражнение из SQLZoo, то IMO должно выглядеть примерно так:
select continent, name from world x
where name = (select name
from world y
where x.continent = y.continent
order by name asc
limit 1)
P.S. Сейчас я изучаю SQL, и этот пост помог мне. Спасибо @Parado!)
Обновление: я нашел этот сайт с ответами. Полезно, если стек.
Попробуйте это
select distinct w.continent,
(select w2.name
from world w2
where w.continent = w2.continent
order by name asc
limit 1) name
from world w
order by w.continent
Решение SqlZoo будет выглядеть следующим образом:
SELECT continent, name FROM world x
WHERE name <= ALL
(SELECT name FROM world y WHERE y.continent=x.continent)
SELECT distinct x.continent , x.name
FROM world x ,world y
WHERE x.name = (SELECT y.name FROM world y
WHERE y.continent=x.continent order by y.name asc limit 1 ) ;
как насчет этого sql:
select distinct continent,
(select name
from world y where y.continent = x.continent limit 1 ) as name
from world x
SELECT continent,
name
FROM world x
WHERE name=
(SELECT name
FROM world y
WHERE x.continent=y.continent
ORDER BY name
LIMIT 1)
Это коррелированный/синхронный запрос.
select continent, name from world group by continent order by name
Попробуйте это
SELECT continent, name FROM world ORDER BY name ASC;
Если вам нужен список всех континентов в алфавитном порядке, вы используете
SELECT * from world ORDER by continent
Но если вы указали список каждой страны, в которой вы используете
SELECT * from world ORDER by name