• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLの集約の方法)

SQLの集約方法とは?

このQ&Aのポイント
  • SQLでID,NO,POINTが同じ値のものを集約する方法について知りたいです。
  • ID,NO,POINTが同じ値の場合、番号の大きいものを抽出する方法と、番号の小さいものを抽出する方法について教えてください。
  • この集約方法を使うことでデータの重複を削除したり、簡潔な結果を得ることができます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

お使いのバージョンとエディションが判りませんが、分析関数の使える 8iエンタープライズ、9i以降のスタンダードエディションならば select x.* from(select z.*,row_number(partition by ID,NO,POINT order by 番号) R from TABLE z) x where x.R=1; select x.* from(select z.*,row_number(partition by ID,NO,POINT order by 番号 desc) R from TABLE z) x where x.R=1;

gonchin01
質問者

お礼

ありがとうございます。 9iを使用しています。 R=1のところがまだよくわかってません。 とりあえず実行するとエラーがでます。 00907 右カッコがありませんとでます。 もう少し調べてみます!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • GROUP BYで集約されるときのソートを変えたい

    GROUP BYで集約されるときのソートを変えたい MySQLの5.1を使用しています。 テーブル"tbl"には、"no","id","score"の3つのフィールドがあり、 "no"は主キーです。 +---+----+-------+ | no | id | score | +---+----+-------+ | 1 | 10 | 10002 | | 2 | 10 | 10000 | | 3 | 10 | 10008 | | 4 | 11 | 10004 | | 5 | 12 | 10006 | +---+----+-------+ 上記の表から、 scoreの値が高い順にグループ化してソートしたいのですが、 以下のSQL文ではscoreが最初に登録されたものに集約されてからグループ化されてソートしてしまうため、 思い通りの結果が得られずに困っています。 ↓具体例 SELECT no, id, score FROM tbl ORDER BY score DESC GROUP BY id; +---+----+-------+ | no | id | score | +---+----+-------+ | 5 | 12 | 10006 | | 4 | 11 | 10004 | | 1 | 10 | 10002 | +---+----+-------+ ↓欲しいソート順 +---+----+-------+ | no | id | score | +---+----+-------+ | 3 | 10 | 10008 | | 5 | 12 | 10006 | | 4 | 11 | 10004 | +---+----+-------+ テンポラリテーブルはなるべく使用せずソートしたいのですが、 このような事は可能なのでしょうか? ご存知の方がいらっしゃいましたら教えていただけると助かります。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQLでの計算と値の集約について

    SQLについて、質問があります。 (質問) 以下のようなDBがあります。 【1のDB】 ID 品目 金額    日付 -------------------------------------------- 1   ミカン   1000    2007/11/1 1   オレンジ  2000    2007/11/1 1   レモン    100    2007/11/1 2   ぶどう   1500    2007/11/1 【2のDB】 区分  品目 金額    日付 ------------------------------------------- a    ミカン   1000    2007/11/1 a    オレンジ   500    2007/11/1 a    レモン    300    2007/11/1 a    ぶどう   1500    2007/11/1 b    ミカン    100    2007/11/1 b    オレンジ   200    2007/11/1 b    レモン    500    2007/11/1 b    ぶどう   2500    2007/11/1 条件。 1のDBの品目=2のDBの品目 やりたい事。 (1)2のDBの金額(区分=a)×1のDBの金額÷2のDBの金額(区分=b) (2)1のDBのIDで、(1)で得た計算結果を集約 上記DBで具体的に言うと、 1のDBのID=1(ミカン、オレンジ、レモン)のそれぞれの計算結果を計算 (ミカン) 1000×1000÷100=10000 (オレンジ) 500×2000÷200=5000 (レモン) 300×100÷500=30 計算結果を集計(ミカン+オレンジ+レモン) 10000+5000+30=15030 上記の作業をできれば、1回のSQLでやりたいと思うのですが、可能でしょうか? 1回のSQLでは不可能な場合、(1)番だけでもやりたいのですが・・・。 SQLのコーディングがよくわかりません。 ご教授をお願いします。

  • SQL文が上手く記述できません・・。

    <<テーブル名:master>> SHOUHIN NO  KOSU ------- --- --------------- A       1   500 A       2   100 A       2   300 A       2   200 A       3   220 A       3   150 A       4   200 A       4   300 A       4   100 <<抽出結果>> SHOUHIN    NO1    NO2    NO3    NO4    GOUKEI -------    ---    ---    ---    ---    ------ A        500    600    370    600    2070 上記のmasterテーブルから、NO毎にKOSUの値を集計して 1レコードにまとめて下記の抽出結果のようにデータを抽出したいと 考えているのですが、なかなか上手くSQLを記述する事が出来ません・・・。 下記のような結果を抽出することは可能でしょうか? ご存知の方がいらっしゃれば、ご教授頂ければ幸いです。 宜しくお願い致します。

  • SQL文の書き方について

    お世話になります。下記のような結果を求めるSQL文についてどなたかご教示をお願いします。 以下の2つのテーブル(SMPL_TBL1,SMPL_TBL2)があったとします。 (SMPL_TBL1) ID | NAME | BUSHO ---+--------+--------- 01 | YAMADA | A_GRP 02 | SUZUKI | A_GRP 03 | OKADA | B_GRP 04 | TAKAGI | C_GRP (SMPL_TBL2) ID | POINT | ---+-------+- 01 | 1 | 01 | 2 | 01 | 3 | 02 | 1 | 02 | 2 | 03 | 1 | 04 | 1 | 04 | 2 | 04 | 3 | 04 | 4 | 04 | 5 | 上記テーブルから以下のような結果を得たい場合、 どのようなSQL文を投げればいいでしょうか? (求める結果) ・各人ごとのPOINTのMAX値と各人のデータを抽出(POINTは1~999までの整数です) ID | NAME | POINT| BUSHO ---+--------+------+-------- 01 | YAMADA | 3 | A_GRP 02 | SUZUKI | 2 | A_GRP 03 | OKADA | 1 | B_GRP 04 | TAKAGI | 5 | C_GRP よろしくお願いいたします。

  • 単一SQL文にて抽出可能でしょうか?

    単一SQL文にて抽出可能でしょうか? Ver8.3系 予めサブクエリーにて任意の条件にて抽出した店データのIDの値を基に、 商品データを抽出するのですが、その商品は、お店毎にランダムに1件抽出される。 <抽出例> 例えば、サブクエリーにて5店舗対象となり、そのお店紐付けられる商品は お店毎にランダムに1商品しか抽出されない。 店ID、商品ID 000001、100001 000002、305001 010000、200010 011111、300001 020000、150000 色々試しているのですが、うまくいきません。 お詳しい方、ご教授願えないでしょうか? よろしくお願いします。

  • SQLの作り方についてご教授下さい。

    SQLの作り方についてご教授下さい。 以下のようなDB及び条件があるとします。 ・DB ----------------------  No   フラグ   金額   1    1     100   2    0     200   3    0     700   3    1     500   3    1     400 ---------------------- ・抽出条件  フラグが1である物のみ抽出対象とします。  同一Noについては、1件しか出力しません。その1件の決め方は  フラグが1である事が前提で、金額が大きい物を取得します。 上記の抽出したい結果 ------------------  No   フラグ   金額   1    1     100   3    1     500 ------------------ これを取得するSQLの作成方法が分かりません。 どのように作成すれば良いでしょうか?

  • 複数ファイルの情報をひとつに集約したい

    (1)~(4) という名前の四つのファイルがあり、中身はすべて同一形式で作成されています。 A列:見積書NO この(1)~(4)のファイルの情報をひとつに集約するシートを新たに作成したいと考えています。その際、(1)~(4)のA列で、見積書NOが入力されているものだけを抽出していきたいのですが、どのようにすればよいでしょうか? (例:(1)のA列で見積書NOが入力されている行は5行、(2)は3行、(3)は15行、(4)は1行 といった場合、集約されるシートのA列には合計24行が入力されるといった具合です) 残りの情報はVLOOKUPで設定できそうなのですが、この方法だけがわかりません。ご教授願います。

  • PL/SQLを使用した、プログラミング方法について

    今、独学でPL/SQLについて学習しているのですが、下記の問題が解けません。。。 考えても、自分の答えが出ないので質問させてください。 ------------------------------------------------------------ 下記の表(temp表)をPL/SQLのカーソルを使い取得しました。 temp表:主キー=No ------------------ No,ID, 処理, 数値 1 , A, 加算(1), 1000 2 , A, 加算(1), 500 3 , A, 減産(2), 500 4 , A, 加算(1), 100 ----------------- 5 , B, 加算(1), 200 6 , B, 減産(2), 100 7 , B, 加算(1), 50 ------------------ 8 , C, 加算(1), 100 9 , C, 減産(2), 50 ※加算の場合、値は「1」減算の場合、値は「2」です。 (1)その後、取得した値を使って、ID別の数値残高を計算したいです。 「加算」「減算」の区別は、「処理」カラムを使って区別をつけたいです。 例:ID「A」の数値残高 = 1000+500-500+100   ID「B」の数値残高 = 200+100-50 (2)1つのIDの計算が終了したら、次のIDの計算が始まる。 例:ID「A」の数値残高が計算終了→ID「B」の残高計算開始→ID「C」の残高計算開始 (3)その後、(2)で計算した値を、ほかのテーブル(answer)に挿入したいです。 例: answer表 ID, 数値残高 -------------- A, 1100 B, 150 C, 50 このような処理をPL/SQLを使って、実装したいのですが。 (1)(2)(3)の処理を教えて頂けないでしょうか? ※1つのIDあたり、1万レコードを持っています。 パフォーマンス(処理速度)も考えて、プログラミングしたいです。 もし、カーソルを使って表を取得する意外に、よい方法があるならば、そちらの方法でも可能です。 ご教授・ご回答よろしくお願いします。質

  • SQlを使用して指定レコードの削除を行いたい

    SQL構文を使用して、テーブル内の指定のデータを削除したいと思っています (oracle11gです) 条件抽出テーブル:PRM_A 抽出条件1の対象カラム:NO_1(6ケタで年月が入っている) 抽出条件2の対象カラム:NO_2(0か1が入っている) 抽出内容:NO_1の年月のうち、最小の値かつ、NO_2の値が0である →抽出結果として、6けたの年月が出力される 削除対象テーブル:DEL_TBL_A 削除条件用カラム1:DEL_COL_1 削除条件用カラム2:DEL_COL_2 削除条件:DEL_COL_1が「抽出結果」の1~4桁目(4桁の数値)と一致し、 DEL_COL_2が「抽出結果」の5~6桁目(2桁の数値)と一致する 以上の処理を行おうとして、まずは前半部分(抽出結果の抜き出しまで)を行いました。 select min(NO_1) from PRM_A where NO_2=0 上記で、想定できる結果の出力ができました。 その次に、削除条件を作成しようとしたのですが、下記の記載で実施したところ、 Error [row:3,col:130] ORA-00936: 式がありません。 と出力されました。 select substr((select min(NO_1) from PRM_A ),1,4) from PRM_A where NO_2=0 and (select min(NO_1) from PRM_A) ; 申し訳ございませんが、理由と正しいSQL文がお分かりになられる方がおりましたら、ご教授願えませんでしょうか

  • SQLの抽出方法を可能か教えてください

    初めましてm(__)m SQLを最近始めたばかりの為、次のような場合の抽出条件がわかりません。 どなたかご存知の方がいましたら、回答をよろしくお願いいたします。 次のようなDBがあったとします。 項目1  項目2  項目3 001   aaa   003 002   bbb   005 003   ccc   004 004   ddd   005 このDBに対し、検索条件を項目1=004とした場合に、次のように抽出したいのですが、どうすればよろしいですか? 001   aaa   003 003   ccc   004 004   ddd   005 ※項目1の値が項目3と一致したらそのデータも抽出し、更にそのデータの項目1の値が項目3と一致したらそのデータも抽出するみたいにしたいと考えているのですが可能でしょうか? 以上です。 分かる人がいましたら、よろしくお願いします。

メロハーの曲を教えて下さい
このQ&Aのポイント
  • 80年代のHRブームから、色々なバンドを漁り、聴きましたし、知りました。やはりメロハーといえば北欧が多いと思います。数多のバンドの曲を聴きましたが、イマイチなのが多いので、皆さんのお力を借りたいと思い、質問しています。
  • メロハーのおすすめ曲を教えてください。
  • 北欧を中心に、さまざまな国のメロハーバンドの「イケるぜ!」な曲を教えてください。
回答を見る