SQLの練習問題です。
筆者の環境は以下となっていますが、別のデータベースやツールでもほとんど同じように動作すると思います。
- MariaDB 5.5.48
- MySQL Workbench 6.3 ← 現在、お試し期間中です。
よくわからないという方は、XAMPをインストールすると簡単に筆者と同じ環境を構築できます。以下のページで紹介されています。
【PHP入門】環境構築
問題として使用するデータは以下からダウンロード可能です。phpMyAdminからデータベース(worldcup2014)を作成しインポートしておいてください。
worldcup2014.zip
※データの誤りがありましたので、既にインポートされた方も改めて再インポートをお願いします。※ 2016/07/15
問題:年齢ごとの選手数を表示してください。ただし、5歳毎に合算して表示してください。
正解:
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関数を使用すると小数点以下を切り捨てた商を求めることができます。
- TIMESTAMPDIFF関数で年齢を算出→例1)19、例2)16
- 上記の答えを5で割る→例1)3.8、例2)3.2
- 小数点以下を切り捨てる→例1)3、例2)3
- 5倍して年齢(5歳毎になっている)に戻す→例1)15、例2)15
このように19歳の選手も、16歳の選手も同じ「15」という値になりますので、グループ化すると5歳ごとの集計を行うことができます。
連載目次リンク
関連する連載リンク
WEBアプリケーション関連 人気連載リンク
データベースの基礎が学べるSQL基礎講座
SQL基礎 連載
より実践的なWEBアプリ開発講座!Bootstrap活用を学ぶなら・・
魁!小野の塾 連載