人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下のようなテーブルにデータを入れて、順位を出します。
その際に、上下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’;

●質問者: hopefully
●カテゴリ:就職・転職 コンピュータ
✍キーワード:h1 H2 hoge SELECT SQL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● cooper0524
●25ポイント

http://www.hatena.ne.jp/awindow?qid=1138080139

こういう質問の場合、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文で取得するということでしょうか?

◎質問者からの返答

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


2 ● くいっぱ
●25ポイント

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とか使えるか自身がないので控えておきます。

◎質問者からの返答

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ