###<2020/08/15 追記>
現在、SQLの学習をSQLZOOで開始するのはあまりお勧めできません。
別のサービスの活用をご検討ください。
SQLZOOの「SELECT within SELECT Tutorial」の回答集です。
前回の「SELECT from Nobel Tutorial」の続編です。
- Bigger than Russia
SELECT name FROM world
WHERE population >
(SELECT population FROM world
WHERE name='Russia')
国名を変えるだけ
2 . Richer than UK
SELECT name
FROM world
WHERE continent ='Europe'
AND gdp/population >
(SELECT gdp/population FROM world
WHERE name='United Kingdom')
3 . Neighbours of Argentina and Australia
SELECT name, continent
FROM world
WHERE continent IN
(SELECT continent
FROM world
WHERE name IN ('Argentina', 'Australia'))
ORDER BY name
4 . Between Canada and Poland
SELECT name, population
FROM world
WHERE population >
(SELECT population
FROM world
WHERE name = 'Canada')
AND
population <
(SELECT population
FROM world
WHERE name = 'Poland')
BETWEEN句だと失敗しました。~~(できるはずですよね..?)~~BETWEEN句だとA以上B以下で、A,Bを含む形になってしまうためNG。
5 . Percentages of Germany
SELECT name, CONCAT(ROUND(population/
(SELECT population
FROM world
WHERE name = 'Germany')
*100, 0),'%')
FROM world
WHERE continent = 'Europe'
多重構造でややこしいのですが、個別に見ていきましょう。
ROUND(数値,0)
→数値を小数点以下第一位で四捨五入する
CONCAT(a,b)
→aとbを繋げて「ab」と表示。今回の場合はROUNDした数値に%をつける形。
6 . Bigger than every country in Europe
SELECT name
FROM world
WHERE gdp > ALL
(SELECT gdp
FROM world
WHERE continent = 'Europe' AND gdp > 0)
ALLで特定数値との比較なくすべてを抽出
NULL値を除く処理も加えている。
7 . Largest in each continent
SELECT continent, name, area FROM world x
WHERE area >= ALL
(SELECT area FROM world y
WHERE y.continent=x.continent
AND area > 0)
クエリのテーブルをx、サブクエリのテーブルをyとして
y.continent=x.continentで両テーブルの一致を探している。
8 . First country of each continent (alphabetically)
SELECT continent, min(name)
FROM world
GROUP BY continent
文字列カラムに対してmin()を使うと、アルファベット順に最初のもの、となります。
9 . Difficult Questions That Utilize Techniques Not Covered In Prior Sections
SELECT name, continent
FROM world x
WHERE population/3 >= ALL
(SELECT population
FROM world y
WHERE y.continent=x.continent
AND x.name != y.name)
###続きはこちら