SQLZOOのSELECT from Nobel Tutorialを解いてみた

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

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

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

Winners from 1950

1950年のノーベル賞を表示するようにクエリを変更してください。

解答例

SELECT * 
FROM nobel 
WHERE yr = 1950;

1962 Literature

誰が1962年の文学賞を受賞したか表示してください。

解答例

SELECT 
winner 
FROM nobel 
WHERE yr = 1962 AND subject = 'Literature';


Albert Einstein

Albert Einsterin が受賞した年と分野を表示してください。

解答例

SELECT
yr 
, subject
FROM nobel
WHERE winner = 'Albert Einstein';

Recent Peace Prizes

2000年以降の平和賞受賞者の名前を表示してください。

解答例

SELECT
winner
FROM nobel
WHERE yr >= 2000 AND subject = 'Peace';

John

ファーストネームがJohnの受賞者を表示してください。

解答例

SELECT
winner
FROM nobel
WHERE winner LIKE 'John%';

Chemistry and Physics from different years

1980年の物理学賞受賞者の受賞年・分野・名前を、1984年の科学賞受賞者と一緒に表示してください。

解答例

SELECT
yr
, subject
, winner
FROM nobel
WHERE (subject = 'Physics' AND yr = 1980) OR (subject = 'Chemistry' AND yr = 1984);

Exclude Chemists and Medics

化学賞と医学賞を除いた、1980年の受賞者の受賞年・分野・名前を表示してください。

解答例

SELECT
yr
, subject
, winner
FROM nobel
WHERE (subject <> 'Chemistry' AND subject <> 'Medicine')
AND yr = 1980;

Early Medicine, Late Literature

1909年までに医学賞を受賞した人の受賞年・分野・名前を、2004年以降に文学賞を受賞した人と一緒に表示してください。

解答例

SELECT
yr
, subject
, winner
FROM Nobel
WHERE (yr < 1910 AND subject = 'Medicine') OR (yr >=2004 AND subject = 'Literature');

Umlaut

PETER GRÜNBERGが受賞した賞の詳細をすべて表示してください。

解答例

SELECT
*
FROM nobel
WHERE winner = 'PETER GRÜNBERG';

Apostrophe

EUGENE O’NEILLが受賞した賞の詳細をすべて表示してください。

解答例

SELECT
*
FROM nobel
WHERE winner ='EUGENE O''NEILL';

Knights of the realm

Sir で始まる受賞者の名前・受賞年・分野を列挙してください。最新のものから降順に、名前順に表示してください。

解答例

SELECT
winner
, yr
, subject
FROM nobel
WHERE winner LIKE 'Sir%'
ORDER BY yr DESC, winner;

Chemistry and Physics last

subject IN(‘Chemistry’, ‘Physics’)という書き方は0または1という値として使われます。1984年の受賞者の名前と分野を、分野順・名前順に表示してください。ただし、化学賞と物理学賞は最後に列挙してください。

解答例

SELECT
winner
, subject
FROM(
	SELECT
	winner
	, subject
	, subject IN ('Chemistry', 'Physics') AS dummy
	FROM nobel
	WHERE yr = 1984
) AS nobel_add_dummy
ORDER BY dummy, subject, winner;

サブクエリを使わなくても、同じ結果を表示することができます。↓

SELECT
winner
, subject
FROM nobel
WHERE yr =1984
ORDER BY subject IN ('Chemistry', 'Physics'), subject, winner;

Follow me!

コメントを残す

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

CAPTCHA