5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

paizaの新作ゲームでSQLの問題をやってみた【電脳少女プログラミング2088 | 壊レタ君を再構築】(二人が通った教室)

Posted at

paizaの新作プログラミングゲームをやってみました。

AtCoderみたいな感じでプログラミングの問題が出されるのかなと思ったのですが、それだけでなくSQLの問題もありました。
私は今までSQLの問題に挑戦したことはなかったので、この機会に挑戦してみることにします。

二人が通った教室(paizaランク:C相当)

あなたは学校に残る会話内容の記録へアクセスし情報を得ようとしています。
memory (記憶) テーブルとperson (人物) テーブルが以下の図のようにあります。
memory (記憶) のうち id の小さい順に 10 件取得し memory.id (記憶.ID) と memory.talk (記憶.会話内容) を出力してください。

「10 件取得し」の部分以外は簡単だと思います。

MySQL
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と指定して提出することでクリアできました!

MySQL
  SELECT id, talk -- memory.id (記憶.ID) と memory.talk (記憶.会話内容)
  FROM memory -- memory (記憶) のうち
  ORDER BY id -- id の小さい順に
+ LIMIT 10 -- 10 件取得

paiza.png

提出したコードに対して、フィードバックを返してくれるみたいです。

MySQL以外の場合

PostgreSQLやSQLiteでもLIMIT句を使えば良さそうです。

一方で、SQL ServerではLIMITではなく、TOPを使うようです。
(そういえば、何年か前にそうやってデータを取得したような……)

LIMITは標準SQLの機能ではないため、RDBMSによって対応状況が異なるようです。1

感想

Cランクなら簡単だろうと思っていましたが、自分の知識不足が露呈する結果となりました……。
SQLもちゃんと勉強しようと思います。

  1. 第19回 SELECT文のLIMITとOFFSET

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?