SQL練習問題 – 問21


SQLの練習問題です。

筆者の環境は以下となっていますが、別のデータベースやツールでもほとんど同じように動作すると思います。

  • MariaDB 5.5.48
  • MySQL Workbench 6.3 ← 現在、お試し期間中です。

よくわからないという方は、XAMPをインストールすると簡単に筆者と同じ環境を構築できます。以下のサイトで紹介されています。
WINDOWS XAMPP にて LARAVEL をインストール (XAMPP V1.8.3インストール)

問題として使用するデータは以下からダウンロード可能です。phpMyAdminからデータベース(worldcup2014)を作成しインポートしておいてください。
worldcup2014.zip

※データの誤りがありましたので、既にインポートされた方も改めて再インポートをお願いします。※ 2016/07/15


問題:年齢ごとの選手数を表示してください。ただし、5歳毎に合算して表示してください。

WS000015

正解:

SELECT FLOOR(TIMESTAMPDIFF(YEAR, birth, '2014-06-13') / 5) * 5   AS age, COUNT(id) AS player_count
FROM players 
GROUP BY age

問題20の応用編です。
今回は5歳毎に集計を行うようにとの指示がありますので、前問と同様にTIMESTAMPDIFF関数を使用して年齢を算出した後に、この値が15~19だったら15、20~24だったら20という具合に変換してあげればよいことになります。
FLOOR関数を使用すると小数点以下を切り捨てた商を求めることができます。

1. TIMESTAMPDIFF関数で年齢を算出→例1)19、例2)16
2. 上記の答えを5で割る→例1)3.8、例2)3.2
3. 小数点以下を切り捨てる→例1)3、例2)3
4. 5倍して年齢(5歳毎になっている)に戻す→例1)15、例2)15

このように19歳の選手も、16歳の選手も同じ「15」という値になりますので、グループ化すると5歳ごとの集計を行うことができます。

← SQL練習問題 一覧まとめに戻る

  • このエントリーをはてなブックマークに追加

PAGE TOP