• 締切済み

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

行数をカウントするSQLにつきまして いつもお世話になっております。 下記の売上テーブルから みかん=3(行目) というようなデータを抽出するSQLはどのように記述したら良いのでしょうか? ・・・・売上テーブル・・・ 売上番号 品名 単価 101   りんご 100 102   りんご 100 103   みかん 150 104   りんご 100 105   みかん 150 106   メロン 250 postgre8.3のためrow_numberが使えません

みんなの回答

  • uotch-t
  • ベストアンサー率0% (0/0)
回答No.6

単にselectの時に行番号が欲しいのであればこれでいけると思います。 (あまりスマートではありませんけど) create temp sequence temp_seq; select nextval('temp_seq') as row_num, * from 売上テーブル ; 「みかん=3行目」という結果が必要だとすると一旦テンポラリテーブルに格納してからselectするといった工夫がいると思います。 流動的なselectの結果に行番号を着けてもあまり使い道がないように思うのですが、 何のためにこういう抽出が必要なのかをご説明いただいたほうが、他の方々から もっと有用なアイディアがいただけるのではないかと考えます。

mkato2001
質問者

お礼

>何のためにこういう抽出が必要なのかをご説明 すみません、簡単に書こうとして逆に判り難くなったようです。 例えば、 ・ある条件で検索した結果を、カナ順に1頁10行で5頁までの一覧画面で  表示したとします。 ・修正したいデータは3頁目の4行目にあるとします。 ・3頁目まで画面を進めて、4行目のデータのカナを変更します。 ・カナが変わったので、元の3頁目ではなく、変更後のカナ順で並び替えた  2頁めの画面を表示したいのです。 このときにrow_numberがあれば元のRow_numberが何画面にあるかを検索 するのはできるのですが、無いと質問のように変更後のカナが何番目に出るか を探す必要があります。 今は原始的にループして何行目かを探しています。 スマートな方法があれば教えてください。よろしくお願いします。

回答No.5

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

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.4

こんな感じかな? 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.品名 ) ;

  • mimzy
  • ベストアンサー率33% (32/96)
回答No.3

目的が行番号の取得ということであれば、postgresだと行数に制限はありますが、 OIDというのをテーブルの属性としてつけることが出来ます。

回答No.2

「売上番号」順で、「みかん」が何番目に出てくるかという意味ですか? もしそうなら、売上番号=105の「みかん」は、得ないようにする必要はあるのですか?

mkato2001
質問者

補足

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

回答No.1

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

mkato2001
質問者

補足

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