SQLZOOのSELECT from worldを解いてみた

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

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

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

Introduction

このテーブルについてのメモを読んでください。すべての国の名前、大陸名、人口を表示するこのSQL文を実行して結果をよく見てください。

解答例

SELECT name, continent, population
FROM world;

Large Countries

レコードを絞り込むWHEREのハウツーです。人口が少なくとも2億以上の国の名前を表示してください。

解答例

SELECT name
FROM world
WHERE population >= 200000000;

Per capita GDP

人口2億人以上の国の名前と一人当たりのGDPを教えてください。

解答例

SELECT
name
,gdp / population AS 'per capita GDP'
FROM world
WHERE population >= 200000000;

South America In Millions

南アメリカ大陸の国の、名前と人口(単位:100万人)を表示してください。人口(単位:100万人)は人口を100万で割って求められます。

解答例

SELECT
name
, population / 1000000 AS 'population in millions'
FROM world
WHERE continent = 'South America’;

France, Germany, Italy

フランス、ドイツ、イタリアの名前と人口を表示してください。

解答例

SELECT
name
, population
FROM world
WHERE name IN ('France', 'Germany', 'Italy’);

United

国名にUnitedが含まれる国を表示してください。

解答例

SELECT
name
FROM world
WHERE name LIKE '%United%’;

Two ways to be big

二通りの大国:面積が3百万平方km以上か、人口が2億5000万以上の国を大国とします。面積が大きい国と人口が多い国を表示してください。名前、人口、面積を表示してください。

解答例

SELECT
name
, population
, area
FROM world
WHERE area >= 3000000 OR population >= 250000000;

One or the other (but not both)

排他的OR(XOR)。面積が大きい(300平方km以上)国か、人口が多い(2億5000万以上)国を表示してください。ただしどちらも満たす国は除外します。名前、人口、面積を表示してください。

解答例

SELECT
name
, population
, area
FROM world
WHERE area >=3000000 XOR population >=250000000;

Rounding

南アメリカ大陸の国の、国名と百万単位での人口と10億単位のGDPを表示してください。ROUND関数を使って値は小数点第三位で丸めて表示してください。南アメリカの国の百万単位の人口と、十億単位のGDPを小数点第三位で丸めて表示してください。

解答例

SELECT
name
, ROUND(population / 1000000, 2) AS 'population in millions'
, ROUND(gdp / 1000000000, 2) AS 'gdp in billions'
FROM world
WHERE continent = 'South America’;

Trillion dollar economies

GDPが1兆以上の国の国名と一人あたりのGDPを表示してください。その値は100の位で丸めてください。GDPが1兆ドル以上の国々の一人あたりのGDPを100の位で丸めて表示してください。

解答例

SELECT
name
, ROUND((gdp / population),  -3) AS 'per-capita GDP'
FROM world
WHERE gdp >= 1000000000000;

Name and capital have the same length

ギリシャの首都はアテネです。GreeceとAthenesはどちらも6文字です。国名とその首都が同じ文字数である国の名前と首都を表示してください

解答例

SELECT
name
, capital
FROM world
WHERE LENGTH(name) = LENGTH(capital);

Matching name and capital

スウェーデンの首都はストックホルムです。いずれもSから始まります。国名と首都の1文字目が同じ国の名前と首都を表示してください。ただし、国名と首都が全く同じ国は含めないでください。

解答例

SELECT
name
, capital
FROM world
WHERE LEFT(name, 1) = LEFT(capital, 1) AND name <> capital;

All the vowels

赤道ギニアとドミニカ共和国は国名に母音がすべて使われています。これらの国は国名が1単語以上で構成されているので数えません。すべての母音が使われていて、国名に空白が含まれない国を見つけてください。

解答例

SELECT
name
FROM world
WHERE (name LIKE '%a%'
AND name LIKE '%i%'
AND name LIKE '%u%'
AND name LIKE '%e%'
AND name LIKE '%o%')
AND name NOT LIKE '% %';

Follow me!

コメントを残す

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

CAPTCHA