• 締切済み

行数をカウントする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が返ってくるのではないでしょうか? 最初に見つかった'みかん'行が先頭から何番目かが欲しいのですが

関連するQ&A

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

    行数をカウントするSQLにつきまして いつもお世話になっております。 下記の売上テーブルから りんご=3(行) みかん=2(行) メロン=1(行) というようなデータを抽出するSQLはどのように記述したら良いのでしょうか? ・・・・売上テーブル・・・ 売上番号 品名 単価 1     りんご 100 2     りんご 100 3     りんご 100 4     みかん 150 5     みかん 150 6     メロン 250

  • エクセル いろいろな品名ごとに条件付きのカウントをしたい。

    エクセルマクロについて教えてください。 以下の「元の表」から「抽出した表」のように、○がついているもののカウントをしたいのですが、マクロでやるにはどのようにしたらよいでしょうか。 品名は特定なものではなく、無限にあります。 〔元の表〕 品名 区分 りんご ○ りんご × みかん ○ バナナ ○ バナナ × キウイ ○ りんご × キウイ ○ りんご ○   :   : 〔抽出した表〕 品名  区分 数量 りんご ○ 2 みかん ○ 1 バナナ ○ 1 キウイ ○ 2   :   :

  • PHP SQL 問合せについて

    SQLについて質問いたします。SQL 全般でも結構です。 No,name 1,ばなな 2,りんご 3,ばなな 4,みかん 5,ばなな 6,りんご 上記テーブルで 1,ばなな 3,ばなな 5,ばなな 2,りんご 6,りんご 4,みかん の結果を得るSQLはどのように記述すればよいでしょうか?

  • SQL文について教えてください。

    お世話になります。 テーブルを3つ作りました ユーザーテーブル:USER_MS USE_NO USER_NAME 001   太郎 002   次郎 003   三郎 品名テーブル:HINMEI_MS HINMEI_NO HINMEI_NAME 001    りんご 002    みかん 003    イチゴ 嫌いなものテーブル:KIRAI_TR KIRAI_NO USER_NO HINMEI_NO 001001  001   001 002003  002   003 002001  002   001 ※KIRAI_NO=USER_NO.HINMEI_NO と連結してプライマリーキーにした ここで、次郎の嫌いなものを抽出するときには $USER_NO = '002'; $SQL ="SELECT * FROM KITAI_TR A,HINMEI_MS B WHERE A.USER_NO = '$USER_NO'; で抽出できるのですが、 次郎の嫌いでない002みかんだけを抽出するSQL文がわからず苦慮しています。 以前、オラクルでSQLを使ったことがあったのですが、その時はFROM句の後に(SELECT * FORM・・・・) Bなどと書くと通ったのですがMYSQLでは通りませんでした。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 1つのSQLで2段階の抽出を行いたい

    恐らくそれほど複雑なSQLではないと思いますが、中々SQLが作成できず困っています。 回答いただければ嬉しいです。 以下のテーブルがあったと仮定します。 テーブル名:  売上げ明細 カラム:  ・商品ID … 売上げ明細なので一意ではありません  ・単価 … 同じ商品IDでも、レコードによって単価は異なります  ・数量 … 1~5の整数のみとします 実際のデータは以下の通りです。 商品ID,単価,数量 1001,50,2 1001,60,5 1002,90,3 1003,60,5 1003,80,4 1003,90,1 1004,60,3 上記データを以下の通り抽出するには、どのようなSQLを組めばいいでしょうか? 1.まず各商品IDの中から単価が最大のレコードだけを取り出す 商品ID,単価,数量 1001,60,5 1002,90,3 1003,90,1 1004,60,3 2.次に数量でgroup by して、件数をカウントする 数量,件数 1,1 3,2 5,1 1つのSQL文で2の結果が得られれば、途中の抽出条件は特に問いません。 ちなみにMySQL5を使っています。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQL文について

    SQLの抽出方法について質問です。 【会員】テーブル関連 すきなフルーツを複数選択できます。 テーブル【MEMBER】と【MEMBER_FRUIT】2つのテーブルで管理 例: Aさんは「りんご」「みかん」「スイカ」がすきです。 Bさんは「りんご」「メロン」がすきです。 Cさんは「みかん」「スイカ」がすきです。 テーブル【MEMBER】 ID、MEMBER_CD、MEMBER_NAME 1  10       Aさん 2  20       Bさん 3  30       Cさん ・ ・ テーブル【MEMBER_FRUIT】 ID、MEMBER_CD、FRUIT_CD 1   10      1 2   10      2 3   10      3 4   20      1 5   20      4 6   30      2 7   30      3 ・ ・ テーブル【FRUIT】 ID、ITEM 1 りんご 2 みかん 3 スイカ 4 メロン 【抽出条件】関連 条件も複数選択できます。 テーブル【SEARCH】と【SEARCH_DETAIL】2つのテーブルで管理 ※会員を抽出条件を管理するテーブル テーブル【SEARCH】 ID、TITLE 1 「りんご」または「メロン」がすきな人 2 「スイカ」がすきな人 ・ ・ テーブル【SEARCH_DETAIL】 SEARCH_ID、FRUIT_CD 1         1 1         4 2         3 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・     【SEARCH】のID1の出力結果イメージ MEMBER_CD、MEMBER_NAME 10         Aさん 20         Bさん こんなSQLを作成してみました。 【SEARCH】テーブルをループで1件づつ処理しようと考えています。 他にもっと効率がいいSQLがありますか? よろしくお願いします。 SELECT DISTINCT MEMBER.MEMBER_CD, MEMBER_NAME FROM MEMBER,MEMBER_FRUIT WHERE MEMBER.MEMBER_CD = MEMBER_FRUIT.MEMBER_CD AND MEMBER_FRUIT.FRUIT_CD in ( SELECT FRUIT_CD FROM SEARCH,SEARCH_DETAIL WHERE SEARCH.ID = SEARCH_DETAIL.SEARCH_ID )

  • 抽出した行数を変数に入れたい(オラクルSQL)

    SELECTで抽出した行数を変数に格納したいのですが、上手くいきません。 SQLにあまり経験がなく、ネットで調べながら実践しております。 例えば以下の簡単なSQLを作ったとして、 ---------------------------------------------------- SELECT a,b,c,d,e,f FROM table WHERE c=10 AND e=20; ---------------------------------------------------- ここで抽出した行数を取得し、それを変数に入れたいと思っております。 というのも、後々、抽出したデータの行数を表示したい場合に SELECT COUNT(*) FROM table WHERE c=10 AND e=20; というSQLをその都度入力していては非効率だと思ったからです。 そこで抽出する際に行数を取得し、それを変数に格納して、 行数を表示する処理が今後必要になった際に、その変数を表示すれば良いと考えました。 ですがネットで変数のことを調べた際に VARやDEFINE等のコマンドを見つけましたが、SQLを実行しても上手くいきません。 最初に記載したSQLに、どのような構文を入れたら良いのでしょうか。

  • SQL の 質問

    ORACLE の SQLの質問です。 現在 名称  銘柄  単価 甘さ ビタミン りんご  , 1 , 50 , 5 , 5 りんご , 1 , 40 , 4 , 4 りんご , 1 , 30 , 3 , 3 りんご , 2 , 100 , 5 , 5 りんご , 2 , 80 , 4 , 4 りんご , 3 , 50 , 2 , 5 りんご , 3 , 40 , 2 , 4 メロン , 1 , 1000 , 10 , 3 というテーブル 果実 があり、りんごの 銘柄ごとの 平均単価、平均甘さ、平均ビタミンを 出したいんですが、 SELECT AVG(単価) AS 平均単価, AVG(甘さ) AS 平均甘さ, AVG(ビタミン) AS 平均ビタミン FROM 果実 WHERE 銘柄 = (SELECT DISTINCT 銘柄 FROM 果実) AND 名称 = ‘りんご’ ORDER BY 銘柄 というSQLを考えたのですが、どうしても、WHERE 句の後の銘柄のSQLで「式がありません。」のエラーが出てしまいます。できるだけ * ワイルドカードは使いたくないのですが、もし、どなたか、教えていただける方いましたら、ご教授ください。お願いいたします。

  • mysqlのSQL文の書き方について

    mysqlでA,Bのテーブルがあるとします。 A ID1 りんご ID3 みかん ID4 ぶどう B ID2 メロン ID3 みかん ID4 ぶどう この二枚のテーブルでどちらかのテーブルに存在すればヒットする ようなselec文はどう書いたらいいのでしょうか。重複する行は、 一行のみ抜き出したいです。 こういうかんじにです。 ID1 りんご ID2 メロン ID3 みかん ID4 ぶどう よろしくお願いします。

  • access テーブル結合の逆?

    Access2003 お世話になります。SQLで以下のようなデータを取得する場合、上手い方法はあるのでしょうか。なんだかとても簡単な事のような気がするのですが…… テーブルA: ---品名--- りんご みかん もも いちご テーブルB: ---品名--- りんご もも このテーブルBに入力されているレコードをテーブルAから"除外"して、結果として「みかん」と「いちご」だけが欲しいのです。 テーブルBのレコードが少なければ、直接 品名<>"りんご" とか書いてもいいのかもしれませんが、結合のようなSQLで一発でできてしまったりしないでしょうか。 access上で可能なスマートな方法があれば教えていただきたいです。 よろしくお願いいたします。