以下のようなテーブルにデータを入れて、順位を出します。

その際に、上下5こづつのデータを出したいです。どのようなSQLを作成すればいいのでしょうか?
create table hoge (
id int2,
value int2
);
insert into hoge VALUES( 10,100);
insert into hoge VALUES( 20,90);
insert into hoge VALUES( 30,50);
insert into hoge VALUES( 40,-10);
insert into hoge VALUES( 50,-20);
insert into hoge VALUES( 60,-30);
insert into hoge VALUES( 70,30);
insert into hoge VALUES( 80,20);
insert into hoge VALUES( 90,0);
insert into hoge VALUES( 100,10);
select (select count(*) from hoge h2 where h2.value>=h1.value)||’位’, value from hoge h1 where value = ’0’;

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/01/24 14:22:19
  • 終了:--

回答(2件)

id:cooper0524 No.1

cooper0524回答回数296ベストアンサー獲得回数42006/01/24 14:37:07

ポイント25pt

こういう質問の場合、RDBMSは何を使用しているか、どんな環境なのかを書く必要があると思います。順位というのは何の順位を出すのでしょうか?valueの順位と考えていいのであれば、もし環境がPostgreSQL(またはMYSQL)だとすると、

select id,value from hoge limit 5 order by value;

select id,value from hoge limit 5 order by value desc;

で取れるんじゃないでしょうか?それとも1文で取得するということでしょうか?

id:hopefully

出来れば一文で出来るでしょうか??

2006/01/24 15:43:21
id:kuippa No.2

くいっぱ回答回数1030ベストアンサー獲得回数132006/01/24 15:16:30

ポイント25pt

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/psql_k09.htm

PostgreSQL 編9 - スカラー副問い合わせ、件数指定、OFFSET、LIMIT、HAVING - SAK Streets

どんなDBですか?

int2 。。。PostgreSQLっすかね?

PostgreSQLでSQL組んだ経験がないので、これができるかどうかはわかりませんが。

たとえばこんな感じでどうでしょう。


select * from hoge

order by value

offset 0 limit 5


select * from hoge

order by value desc

offset 0 limit g


これを一発で取得したいのであれば、

パッケージが使えるようなので上の二つを関数として登録しておいてやるか、

サブクエリーで…。あれ、PostgreSQLってrownumみたいな擬似列ってないのかな。。。

ちょっとサブクエリーの中でorder byとか使えるか自身がないので控えておきます。

id:hopefully

ありがとうございます。

2006/01/24 16:05:33

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません