最近、いつ泣きましたか?

行数をカウントするSQLにつきまして

いつもお世話になっております。

下記の売上テーブルから
みかん=3(行目)
というようなデータを抽出するSQLはどのように記述したら良いのでしょうか?

・・・・売上テーブル・・・
売上番号 品名 単価
101   りんご 100
102   りんご 100
103   みかん 150
104   りんご 100
105   みかん 150
106   メロン 250
postgre8.3のためrow_numberが使えません

A 回答 (6件)

単にselectの時に行番号が欲しいのであればこれでいけると思います。


(あまりスマートではありませんけど)
create temp sequence temp_seq;
select
nextval('temp_seq') as row_num,
*
from 売上テーブル
;

「みかん=3行目」という結果が必要だとすると一旦テンポラリテーブルに格納してからselectするといった工夫がいると思います。

流動的なselectの結果に行番号を着けてもあまり使い道がないように思うのですが、
何のためにこういう抽出が必要なのかをご説明いただいたほうが、他の方々から
もっと有用なアイディアがいただけるのではないかと考えます。
    • good
    • 0
この回答へのお礼

>何のためにこういう抽出が必要なのかをご説明

すみません、簡単に書こうとして逆に判り難くなったようです。

例えば、
・ある条件で検索した結果を、カナ順に1頁10行で5頁までの一覧画面で
 表示したとします。
・修正したいデータは3頁目の4行目にあるとします。
・3頁目まで画面を進めて、4行目のデータのカナを変更します。
・カナが変わったので、元の3頁目ではなく、変更後のカナ順で並び替えた
 2頁めの画面を表示したいのです。
このときにrow_numberがあれば元のRow_numberが何画面にあるかを検索
するのはできるのですが、無いと質問のように変更後のカナが何番目に出るか
を探す必要があります。

今は原始的にループして何行目かを探しています。
スマートな方法があれば教えてください。よろしくお願いします。

お礼日時:2010/07/09 18:04

データベースにおいて、sqlによるデータの抽出をした場合、それが


何件目かのデータかを見たいのであれば、それは意味がないと思います
が..あくまでも抽出したレコードは、物(ある塊)であってレコード
をどの順に持ってくるかは保証していません。(たしかsql97基準とか
に書いてあった)もし、入力順とかという意味で取得したいのであれば
それが識別できる番号をレコードに持たないと、それが何番目に入力
したレコードなのかは判断できないかと思います。
    • good
    • 0

こんな感じかな?


SELECT
(
SELECT count(*) FROM 売上テーブル A2
WHERE A.売上番号 >= A2.売上番号
) as rn
from 売上テーブル a
where A.品名 = 'みかん'
and not exists
( select 1 from 売上テーブル a3
where A.売上番号>A3.売上番号
and a.品名=a3.品名 )
;
    • good
    • 0

目的が行番号の取得ということであれば、postgresだと行数に制限はありますが、


OIDというのをテーブルの属性としてつけることが出来ます。
    • good
    • 0

「売上番号」順で、「みかん」が何番目に出てくるかという意味ですか?


もしそうなら、売上番号=105の「みかん」は、得ないようにする必要はあるのですか?

この回答への補足

欲しいのは
先頭に名前が出てくる行番号の3で、データは得る必要がありません。

補足日時:2010/05/04 09:52
    • good
    • 0

こんな感じ



SELECT Count(*) as total FROM 売上テーブル where "品名"='みかん';

この回答への補足

品名がみかんの合計行数で2が返ってくるのではないでしょうか?
最初に見つかった'みかん'行が先頭から何番目かが欲しいのですが

補足日時:2010/05/04 09:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す