SQLZOOのSUM and COUNTを解いてみた
さいきんSQLを勉強していまして、Gunosyの「非エンジニアが最速でSQLをマスターする方法」に書いてある『10年戦えるデータ分析入門』→SQLZOO (https://sqlzoo.net/wiki/SQL_Tutorial) という順番で学習を進めています。
SQLZOOは出力が合っているのか違っているのかは教えてくれるのですが、どんなSQL文を書けば正解できるのか教えてくれません。すでに日本語でSQLZOOの解答を公開してくださっている方もおられますが、私も自分の勉強のアウトプットとして、解答例を公開したいと思います。
SQLZOOは問題文が英語なので、あまり自信はありませんが問題文の和訳も用意しました。意訳なので正確さに欠けるかもしれませんが……
- SELECT within SELECT の解答例はこちら → https://rnsr0371.boy.jp/2020/12/18/sqlzooselect_within_select/
参考にさせていただいたサイト
- 【SQLZOO答え】5.SUM and COUNT https://note.com/shincz88/n/n4d5f6ee1d98b
- SQLZOO 「SUM and COUNT」 回答集 https://qiita.com/TakahiroNAMBU/items/8efc21051b907993b3e4
今回の学び
- 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;
参考: