見出し画像

【SQLZOO答え】4.SELECT within SELECT

SQL入門を勉強するため、友人にSQLの練習問題ないかと聞いたら、
【SQLZOO】というサイトを教えてもらいました。
ただし、問題を解いてるうちに、わからない問題に関して、クエリの答えがおらず、結果しか教えてくれないので、答えをアウトプットしようと思い、noteを始めました。

0.SQLZOO練習問題 

SELECT within SELECT

1.ロシアより大きい

ロシア(Russia)よりも人口(population)が多い国の名前を表示する。

world(name 国名, continent 大陸, area 面積, population 人口, gdp 国内総生産)
select
 name
from
 world
where
 population >(select population
               from world
               where name = 'Russia');

2.イギリスより豊か

国民一人当たりの国内総生産がイギリス 'United Kingdom' よりも大きなヨーロッパの国を表示する。
国内総生産
国内総生産の式は gdp/population

select
 name
from
 world
where
 gdp/population > (select gdp/population
                    from world
                    where name = 'United Kingdom' )
and continent = 'Europe';

3.アルゼンチンとオーストラリアの近所

'Argentina'または'Australia'を含む大陸にある国の、国名と大陸を表示する。国名順に表示する。

select
 name, continent
from 
 world
where continent in (select continent 
                     from world
                     where name = 'Argentina' or name ='Australia')
order by name;

4.カナダとポーランドの間

人口がカナダ Canadaよりも多く、ポーランドPolandよりも少ない国の、国名と人口を表示する。

select
 name, population
from 
 world
where
 population > 
        (select population
        from world
        where name = 'Canada')
and
 population < 
        (select population
         from world
         where name = 'Poland');

5.ドイツのパーセント

ドイツは(人口 80000000人)とヨーロッパで最大の人口の国である。オーストリア(人口8500000人)はドイツの人口の11%である。
ヨーロッパの各国について 国名と人口を表示する。ドイツ人口の何%かで表示する。
小数点以下:ROUND関数で小数点以下を除去できる。
パーセント記号 %:CONCAT関数で記号を付け加えられる。

select
 name, concat(round(population/
                    (select population
                     from world
                     where name = 'Germany')*100,0),'%') 
from 
 world
where
 continent = 'Europe';

6.ヨーロッパで最大の国

ヨーロッパのどの国のGDPよりも大きなGDPを持つ国の国名だけを表示する。(GDPがNULL の国も有る)。

select
 name
from
 world
where
 gdp > (select max(gdp)
        from world
        where continent = 'Europe');

7.各大陸で最大

各大陸のもっとも大きな国(面積で)の大陸、国名、面積を表示する。

select
 continent, name, area 
FROM
 world A
WHERE
 area >= ALL(SELECT area 
             FROM world B
             WHERE B.continent=A.continent);

8.各大陸で先頭の国(アルファベット順)

各大陸の中でアルファベット順で先頭になる国の大陸と国名を表示する。

select
 continent, min(name) 
from
 world
group by
 continent;

9.難問

大陸に属する各国の人口が25000000以下である大陸を見つけ、それらの大陸に属する国の名前と大陸と人口を表示。

SELECT
 name,continent,population
FROM
 world A
WHERE
 25000000>=ALL(SELECT population
               FROM world B 
               WHERE B.continent=A.continent);

10.難問

同じ大陸にある他の全ての国よりも3倍は大きな人口の国の、国名と大陸を表示する。

select
 name, continent 
from
 world A
where
 population>all(select 3*population
               from world B
               where B.continent= A.continent
                and B.name <> A.name);

その他の答えへ

0.SELECT basics
1.SELECT name
2.SELECT from World
3.SELECT from Nobel
4.SELECT within SELECT
5.SUM and COUNT
6.JOIN
7.More JOIN operations
8.Using Null
8+ Numeric Examples
9.Self join
10.Tutorial Quizzes
11.Tutorial Student Records
12.Tutorial DDL

※問題を攻略でき次第、随時更新いたします。 

この記事が気に入ったらサポートをしてみませんか?