SQLZOOのSUM and COUNTを解いてみた

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

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

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

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

今回の学び

  • HAVING節はSUM()などで集計した後の値で絞り込みができる。

Total world population

世界の総人口を表示してください。

SELECT
    SUM(population)
FROM world;

List of continents

すべての大陸を一度ずつ列挙してください。

SELECT
    DISTINCT(continent)
FROM world;

GDP of Africa

アフリカの総GDPを表示してください。

SELECT
    SUM(gdp)
FROM world
WHERE continent = 'Africa’;

Count the big countries

面積が100万以上の国はいくつありますか。

SELECT
    COUNT(*)
FROM world
WHERE area >= 1000000;

Baltic states population

エストニア・ラトビア・リトアニアの総人口はいくつですか。

SELECT
    SUM(population)
FROM world
WHERE name IN ('Estonia', 'Latvia', 'Lithuania’);

Using GROUP BY and HAVING

Counting the countries of each continent

大陸ごとに、大陸名と国の数を表示してください。

SELECT
    continent
    , COUNT(*)
FROM world
GROUP BY continent;

Counting the big countries of each continent

大陸ごとに、大陸名と人口が1000万以上の国の数を表示してください。

SELECT
    continent
    , COUNT(*)
FROM world
WHERE population >= 10000000
GROUP BY continent;

Counting big continents

総人口が1億以上の大陸を列挙してください。

SELECT
    world_by_cotinent.continent
FROM
    (SELECT
        continent
        ,SUM(population) AS total_population
    FROM world
    GROUP BY continent) AS world_by_cotinent
WHERE total_population >= 100000000;

HAVING節を使えば、サブクエリを使わずに同じ結果を表示することができます。HAVING節を使ったほうがスマートです。

SELECT
    continent
FROM world
GROUP BY continent
HAVING SUM(population) >= 100000000;

参考:

Follow me!

コメントを残す

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

CAPTCHA


SQL

次の記事

SQLZOOのJOINを解いてみた