paizaの新作プログラミングゲームをやってみました。
AtCoderみたいな感じでプログラミングの問題が出されるのかなと思ったのですが、それだけでなくSQLの問題もありました。
私は今までSQLの問題に挑戦したことはなかったので、この機会に挑戦してみることにします。
二人が通った教室(paizaランク:C相当)
あなたは学校に残る会話内容の記録へアクセスし情報を得ようとしています。
memory (記憶) テーブルとperson (人物) テーブルが以下の図のようにあります。
memory (記憶) のうち id の小さい順に 10 件取得し memory.id (記憶.ID) と memory.talk (記憶.会話内容) を出力してください。
「10 件取得し」の部分以外は簡単だと思います。
SELECT id, talk -- memory.id (記憶.ID) と memory.talk (記憶.会話内容)
FROM memory -- memory (記憶) のうち
ORDER BY id -- id の小さい順に
しかし、10件だけ取得する部分は考えてもわかりませんでした。
この問題に限ればWHERE id <= 10
とすれば良さそうですが、一般的に指定した件数だけを取得したい場合はどうすべきなのかがわかりません。
仕方がないので、Googleで「MySQL n件」のような感じで調べてみると、LIMIT
句を使えば良さそうだということがわかりました。
LIMIT 10
と指定して提出することでクリアできました!
SELECT id, talk -- memory.id (記憶.ID) と memory.talk (記憶.会話内容)
FROM memory -- memory (記憶) のうち
ORDER BY id -- id の小さい順に
+ LIMIT 10 -- 10 件取得
提出したコードに対して、フィードバックを返してくれるみたいです。
MySQL以外の場合
PostgreSQLやSQLiteでもLIMIT
句を使えば良さそうです。
一方で、SQL ServerではLIMIT
ではなく、TOP
を使うようです。
(そういえば、何年か前にそうやってデータを取得したような……)
LIMIT
は標準SQLの機能ではないため、RDBMSによって対応状況が異なるようです。1
感想
Cランクなら簡単だろうと思っていましたが、自分の知識不足が露呈する結果となりました……。
SQLもちゃんと勉強しようと思います。