sqlzoo 'select from world' 教程的第 13 部分的解决方案是什么?
What is the solution to 13th part of 'select from world' tutorial on sqlzoo?
Put the continents right...
- Oceania becomes Australasia
- Countries in Eurasia and Turkey go to Europe/Asia
- Caribbean islands starting with 'B' go to North America, other Caribbean islands go to South America
Show the name, the original continent and the new continent of all
countries.
我的解决方案:
SELECT name, continent,
CASE WHEN continent='Oceania' THEN 'Australasia'
WHEN continent IN ('Europe', 'Asia') THEN 'Europe/Asia'
WHEN name='Turkey' THEN 'Europe/Asia'
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
ELSE continent END
FROM world
我从 sqlzoo 得到的结果是 "Wrong answer. Some of the data is incorrect."。
这对我有用。不要问我为什么必须使用 ORDER BY(没有它就不能工作)。
SELECT name, continent,
CASE WHEN continent='Oceania' THEN 'Australasia'
WHEN continent = 'Eurasia' THEN 'Europe/Asia'
WHEN name='Turkey' THEN 'Europe/Asia'
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
ELSE continent END
FROM world ORDER BY name
除非我读错了问题,否则看起来是他们系统中的错误:
SELECT name, continent,
CASE WHEN continent='Oceania' THEN 'Australasia'
WHEN continent IN ('Eurasia') THEN 'Europe/Asia'
WHEN name='Turkey' THEN 'Europe/Asia'
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
ELSE continent END
FROM world
order by name
如果您添加 "order by name",它会给出上述查询的正确答案。但是,如果您不包含订单,则将其标记为不正确。至于为什么我不确定。
这也行。对土耳其使用 OR 语句并重命名新列
SELECT name,continent,
CASE
WHEN continent='Oceania' THEN 'Australasia'
WHEN continent='Eurasia' OR name = 'Turkey' THEN 'Europe/Asia'
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
ELSE continent
END as 'new continent name'
FROM world
ORDER BY name
我试过了,对土耳其使用 'OR'
而不是发表新声明无济于事。
同意这是不正确的,可能是页面 sqlzoo
.
的错误
但是当与'ORDER BY name'
一起使用时,两种方式都是正确的。
并且列的名称并不重要,您可以将它们命名为'as YouLikeItToBe'。
很明显,sqlzoo
检查 table 中的内容,计数及其顺序,但是,不保持顺序。
顺序应该无关紧要,但网站的回答(当您回答错误时)建议输出应按国家/地区名称排序。
SELECT name AS Country, continent as Continent,
CASE WHEN continent='Oceania' THEN 'Australasia'
WHEN continent IN ('Eurasia', 'Turkey') THEN 'Europe/Asia'
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
ELSE continent END AS "New Continent"
FROM world
ORDER BY Country;
下面的代码应该可以解决您的问题:
SELECT name AS Country, continent as Continent,
CASE WHEN continent='Oceania' THEN 'Australasia'
WHEN continent = 'Eurasia' THEN 'Europe/Asia'
WHEN name='Turkey' THEN 'Europe/Asia'
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
ELSE continent END AS "New Continent"
FROM world
WHERE tld IN ('.ag','.ba','.bb','.ca','.cn','.nz','.ru','.tr','.uk')
ORDER BY Country;
Put the continents right...
- Oceania becomes Australasia
- Countries in Eurasia and Turkey go to Europe/Asia
- Caribbean islands starting with 'B' go to North America, other Caribbean islands go to South America
Show the name, the original continent and the new continent of all countries.
我的解决方案:
SELECT name, continent,
CASE WHEN continent='Oceania' THEN 'Australasia'
WHEN continent IN ('Europe', 'Asia') THEN 'Europe/Asia'
WHEN name='Turkey' THEN 'Europe/Asia'
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
ELSE continent END
FROM world
我从 sqlzoo 得到的结果是 "Wrong answer. Some of the data is incorrect."。
这对我有用。不要问我为什么必须使用 ORDER BY(没有它就不能工作)。
SELECT name, continent,
CASE WHEN continent='Oceania' THEN 'Australasia'
WHEN continent = 'Eurasia' THEN 'Europe/Asia'
WHEN name='Turkey' THEN 'Europe/Asia'
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
ELSE continent END
FROM world ORDER BY name
除非我读错了问题,否则看起来是他们系统中的错误:
SELECT name, continent,
CASE WHEN continent='Oceania' THEN 'Australasia'
WHEN continent IN ('Eurasia') THEN 'Europe/Asia'
WHEN name='Turkey' THEN 'Europe/Asia'
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
ELSE continent END
FROM world
order by name
如果您添加 "order by name",它会给出上述查询的正确答案。但是,如果您不包含订单,则将其标记为不正确。至于为什么我不确定。
这也行。对土耳其使用 OR 语句并重命名新列
SELECT name,continent,
CASE
WHEN continent='Oceania' THEN 'Australasia'
WHEN continent='Eurasia' OR name = 'Turkey' THEN 'Europe/Asia'
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
ELSE continent
END as 'new continent name'
FROM world
ORDER BY name
我试过了,对土耳其使用 'OR'
而不是发表新声明无济于事。
同意这是不正确的,可能是页面 sqlzoo
.
但是当与'ORDER BY name'
一起使用时,两种方式都是正确的。
并且列的名称并不重要,您可以将它们命名为'as YouLikeItToBe'。
很明显,sqlzoo
检查 table 中的内容,计数及其顺序,但是,不保持顺序。
顺序应该无关紧要,但网站的回答(当您回答错误时)建议输出应按国家/地区名称排序。
SELECT name AS Country, continent as Continent,
CASE WHEN continent='Oceania' THEN 'Australasia'
WHEN continent IN ('Eurasia', 'Turkey') THEN 'Europe/Asia'
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
ELSE continent END AS "New Continent"
FROM world
ORDER BY Country;
下面的代码应该可以解决您的问题:
SELECT name AS Country, continent as Continent,
CASE WHEN continent='Oceania' THEN 'Australasia'
WHEN continent = 'Eurasia' THEN 'Europe/Asia'
WHEN name='Turkey' THEN 'Europe/Asia'
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
ELSE continent END AS "New Continent"
FROM world
WHERE tld IN ('.ag','.ba','.bb','.ca','.cn','.nz','.ru','.tr','.uk')
ORDER BY Country;