SQLZOOのSELECT within SELECTを解いてみた

さいきんSQLを勉強していまして、Gunosyの「非エンジニアが最速でSQLをマスターする方法」に書いてある『10年戦えるデータ分析入門』→SQLZOO (https://sqlzoo.net/wiki/SQL_Tutorial) という順番で学習を進めています。

 SQLZOOは出力が合っているのか違っているのかは教えてくれるのですが、どんなSQL文を書けば正解できるのか教えてくれません。すでに日本語でSQLZOOの解答を公開してくださっている方もおられますが、私も自分の勉強のアウトプットとして、解答例を公開したいと思います。

 SQLZOOは問題文が英語なので、あまり自信はありませんが問題文の和訳も用意しました。意訳なので正確さに欠けるかもしれませんが……

参考にさせていただいたサイト

今回新しく知ったこと

  • 相関サブクエリ
  • MIN()を文字列に使うとアルファベッド順で一番若いものを返すこと

Bigger than Russia

ロシアより人口の多い国の国名を列挙してください。

SELECT
name
FROM world
WHERE population > 
(SELECT population FROM world WHERE name = 'Russia’);

Richer than UK

ヨーロッパの国で一人あたりのGDPがイギリスより多い国を表示してください。

SELECT
name
FROM world
WHERE (gdp / population) >
    (SELECT
    gdp / population
    FROM world
    WHERE name = 'United Kingdom')
AND continent = 'Europe’;

Neighbours of Argentina Australia

アルゼンチンかオーストラリアが含まれる大陸に所属する国の名前と大陸名を列挙してください。国名順に並べ替えること。

SELECT
    name
    , continent
FROM world
WHERE continent IN
    (SELECT
        continent
    FROM world
    WHERE name = 'Argentina' OR name = 'Australia')
ORDER BY name;

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’);

Percentages of Germany

ドイツ(人口8000万人)はヨーロッパの国で最大の割合です。オーストリア(人口850万人)はドイツの人口の11%です。ヨーロッパの各国の国名と人口を表示してください。人口はドイツの人口の割合で表示してください。

SELECT
    name
    , ROUND(population /
         (SELECT population FROM world WHERE name = 'Germany') * 100) || '%' AS percentages
FROM world
WHERE continent = 'Europe’;

Bigger than every country in Europe

ヨーロッパのどの国よりもGDPが大きい国はどこでしょう?

SELECT
    name
FROM world
WHERE gdp >
    (SELECT 
    MAX(gdp)
    FROM world
    WHERE continent = 'Europe’);

Largest in each continent

面積が各大陸で一番大きい国を見つけて、大陸名・国名・面積を表示してください。

SELECT
    continent
    , name
    , area
FROM world AS x
WHERE area >= ALL
    (SELECT area 
    FROM world AS y 
    WHERE x.continent = y.continent);

参考:https://marucoblog.com/programing/4-select-within-select/

First country of each continent (alphabetically)

大陸ごとに国をアルファベッド順並べた時、最初の国の名前とその大陸を列挙してください。

SELECT
    continent
    , MIN(name)
FROM world
GROUP BY continent;

参考:https://marucoblog.com/programing/4-select-within-select/

Difficult Questions That Utilize Techniques Not Covered In Prior Sections

10.

大陸に所属する国の人口がすべて2500万人以下の大陸を見つけてください。その後、それらの大陸に属する国の名前を見つけてください。国名・大陸・人口を表示すること。

SELECT
    name
    , continent
    , population
FROM world AS x
WHERE 25000000 >= ALL
    (SELECT population
    FROM world AS y
    WHERE x.continent = y.continent);

参考:https://marucoblog.com/programing/4-select-within-select/

11.

同大陸内のどの国よりも3倍以上人口を持っている国があります。国名と大陸を教えてください。

SELECT
    name
    , continent
FROM world AS x
WHERE population >= ALL
    (SELECT population * 3
    FROM world AS y
    WHERE x.continent = y.continent AND x.name <> y.name);

参考:https://marucoblog.com/programing/4-select-within-select/

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA