• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQLで変数やループ、上位3名を求める方法)

MySQLで変数やループ、上位3名を求める方法

このQ&Aのポイント
  • MySQLを使って変数やループを活用してデータベースから上位3名を求める方法について教えてください。
  • 質問1では、増分を書き込むために新しい列を追加する方法を検討しています。
  • 質問2では、すべての会員についてループさせる方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

仮にこうします monthは月の整数でもつと、年をまたいだ時に大変なので、日付型のデータの方がよいです //元データ create table score (id int not null primary key auto_increment, name varchar(20), score int, month date, increment int not null,unique(name,month)); insert into score(name,score,month) values ('taro',100,'2013-11-01') ,('jiro',200,'2013-11-01') ,('saburo',150,'2013-11-01') ,('hanako',200,'2013-11-01') ,('yosiko',160,'2013-11-01') ,('taro',50,'2013-10-01') ,('jiro',200,'2013-10-01') ,('saburo',250,'2013-10-01') ,('hanako',300,'2013-10-01') ,('yosiko',100,'2013-10-01'); //incrementを求める update score as s1 inner join score as s2 on s1.month + interval 1 month =s2.month and s1.name=s2.name set s2.increment=s2.score-s1.score; where s2.month='2013-11-01' //雑なランク付け select name,increment from score where month='2013-11-01' order by increment desc limit 3; ランク付けは同順位の処理をどうするか考えるとすこし複雑になってきますが 今回はとりあえず表示するだけの簡単な文法を提示しておきます

Saotome_Haruka
質問者

お礼

ご回答、ありがとうございます。 週末、ミックさんのサイト http://www.geocities.jp/mickindex/database/idx_database.html を見つけ、学習していました。 手続き型の通常の言語と異なり、 SQLは集合操作を意識した点が特色のようです。 発想の転換が求められる感じで、 いろいろ慣れない点もありますが、理解を深めていきたいと思います。 ご回答、ありがとうございましたmm

その他の回答 (1)

回答No.1

質問2 update score s1,score s2 set s1.increment=s1.score-s2.score where s1.month='11' and s2.month='10' and s2.name=s1.name 設問3 select concat(name,'さん'),concat(increment,'点') from score where month='11' order by increment desc limit 3;

Saotome_Haruka
質問者

お礼

ご回答、ありがとうございます。 #2の方と合わせて、同じ結果を求めるにも違う方法もあるのだと、ためになりました。 また、機会がございましたら、お願いいたします。 ありがとうございましたmm。

関連するQ&A