• 締切済み

データの和計算

以下を実現するSQL文教えてください。 テーブル名:i_num id | number ^^^^^^^^^^^^ a | 5 b | 4 c | 2 d | 6 e | 9 上記の表で、0に近い値から足し算を行い、全体の50%を超えたときのnumberを取り出したいです。 c+b+a+d+e / 全体 が50%を超えた時のnumberは、ここでは、d=6を取り出したいです。 よろしくお願い致します。

みんなの回答

回答No.3

#1、#2回答者です。 #2の回答は質問内容と合っていませんでした。 無視してください。

the-ai
質問者

お礼

一時テーブルなどを用いてできました。 ありがとうございました。

回答No.2

#1回答者です。 質問のケースに限っては、以下のSQLで実現可能だと思います。 select id,number from i_num where number>(select sum(number)/count(*) from i_num) order by number limit 1; こういった処理はSQLで無理やりやるより、ストアドプロシジャやアプリケーシュンでやった方が、性能が出たり処理も簡単にできる場合が多いです。

回答No.1

>0に近い値から足し算を行い SQLではそういう制御はできないので、PL/pgSQL等を使用してください。

関連するQ&A

  • こんばんは。

    こんばんは。 軽いSQL文がかけずに困っております。 どなたかご教示願います。Postgres8.3になります。 テーブル名 num カラムはuserとidとします。 データは最下部にあるように持ちます。 a~eのユーザのうち、idが2200番台のうち、2201と2202だけをもつユーザを抽出するSQL文を望みます。 a:2200と2203が存在するので偽 b:真 c:2202が無いので偽 d:2203が存在するので偽 e:真 このようなSQLを書きました。 1.numより2201を持つuser 2.numより2202を持つuser 3.numより22~で始まる以外のuser それぞれの等しいuserが真と思ったのですが、本来3.では22~始まるidを持たないuser としなければなりませんでした。 ここで詰まってしまい、タイムアップとなってしまいました。 どのようなSQLが望ましいでしょうか。 よろしくお願いいたします。 select * from num as m, (select x.user from (select user from num where id = 2201 group by user_id) as x, (select user from num where id = 2202 group by user_id) as y, (select user from num where id::text not like '22%' group by user) as z where x.id = y.id and x.id = z.id and y.id = z.id) as n where m.id = n.id; num user,id a,1000 a,1100 a,2000 a,2100 a,2200 a,2201 a,2202 a,2203 a,3000 b,1000 b,2100 b,2201 b,2202 b,3000 b,3100 c,1000 c,2201 c,2203 c,3000 c,3100 c,3200 d,1000 d,2100 d,2201 d,2202 d,2203 d,3000 d,3100 d,3200 e,1000 e,2201 e,2202 e,3000 e,3100 e,3200 e,3300

  • テーブルの結合について

    お世話になります。 ACCESSで、以下のテーブル(1)をベースにテーブル(2)をUNIONさせ、テーブル(3)の様に作成したいです。 どのような方法で実現できるのでしょうか? テーブル(1) id ,pass,biko 001,1234, a 002, 0, 0 003, 0, 0 004, 0, 0 005, 0, 0 テーブル(2) id ,pass,biko 002,2345, b 003,3456, c 004,4567, d 005,5678, e テーブル(3) id ,pass,biko 001,1234, a 002,2345, b 003,3456, c 004,4567, d 005,5678, e また、テーブル(3)をSQL Serverにも同一のものをコピーしたいのですが どの様にすればいいでしょうか? ODBC接続は出来ております。 お手数ではありますが、ご回答をお待ちしております。

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

    SQL文の構築について教えてください。 こんばんは。Oracle9iのデータベース検索で、どうしてもSQLが思い浮かばないため、質問させていただきます。 ■Table ID    NUM   SIGN 100   1    A 100   2    A 101   1    A 102   1    B 103   1    B 104   1    C 首キーはID、NUMです。 上記のようなテーブルで、 IDが同一かつNUMが最大のもので、 SIGNが同一のレコードで、2件以外のレコードを抽出したいです。 (例表でいうと、ID104のレコードのみが抽出されるようにしたい) すこし急ぎなんですが、SQLが得意でお時間がある方、力を貸していただけないでしょうか。 よろしくお願い致します。

  • 外部結合でのcount結果でゼロを表示

    以下の様なテーブルがあります。 テーブルを結合してカウントを行っているのですが、 tbl1の商品コードに存在しないユーザが存在しない場合や tbl3のフラグが”0”または”1”が存在しない場合、 ゼロ件と出したいのですが出力されません。 どうすれば期待した結果になるか教えて下さい。 ■tbl1 ID SYOHIN_CODE ---- ----------- 1 A01 2 B01 3 C01 4 D01 5 E01 ■tbl2 ID NUM SYOHIN_ID ---- ------- --------- 1 NUM001 1 2 NUM002 2 3 NUM003 3 4 NUM004 4 5 NUM005 1 6 NUM006 1 7 NUM007 2 8 NUM008 3 9 NUM009 4 10 NUM010 1 ■tbl3 ID NUM_ID FLG ---- -------- ---- 1 1 1 2 2 1 3 3 1 4 4 0 5 5 0 6 6 0 7 7 0 8 8 1 9 9 0 10 10 0 ■実行した結果 SYOHIN_CODE FLG CNT ----------- ---- --------------- A01 0 3 A01 1 1 B01 0 1 B01 1 1 C01 1 2 D01 0 2 ■期待する結果 SYOHIN_CODE FLG CNT ----------- ---- --------------- A01 0 3 A01 1 1 B01 0 1 B01 1 1 C01 0 0 C01 1 2 D01 0 2 D01 1 0 E01 0 0 E01 1 0 実行したSQL select T1.syohin_code,T3.flg,count(T2.num) cnt from tbl1 T1 inner join tbl2 T2 on T1.id=T2.syohin_id inner join tbl3 T3 on T2.id=T3.num_id group by T1.syohin_code,T3.flg order by T1.syohin_code ;

  • エクセル 縦列に並ぶデータを横に並べる

    いつもお世話になります。下のような既存の表があります。IDがあり各IDごとにデータが入っています。各IDにあるデータの数は不規則です。(多くても10個くらいまでです。)簡単に書くとこんな感じです。  |A |B |C |D |E | 1|ID|No. |  |←タイトル行 2|T1|11|  | 3|T1|15|  | 4|T1|17|  | 5|T2|13|  | 6|T2|16|  | 7|T3|14|  | ・ ・ ・ これをそれぞれのIDにあわせて横に並べ,これに枠をつけて印刷したいと思います。  |A |B |C |D | 1|ID|No. |  |  | 2|T1|11|15|17| 3|T2|13|16|  | 4|T3|14|  |  | ・ ・ ・ この並べ替えを,作業列や作業用シートは作ってもいいので,関数で実現したいと思います。良い知恵をお借りできたら幸いです。よろしくお願いします。

  • Accessで2つのテーブルのデータの整合性を確認したい

    Accessで2つのテーブルのデータの整合性を確認したいのですが、よい方法を教えていただけませんか? 状況は以下のとおりです。 Aテーブル    a   b    c   d   e       1  111  222  333  444  555 2  666   777 888 999 100 3   110 112 113 114 115 Bテーブル    a   b    c   d   e       1  111 222 333 444 555 2  666 777 000 999 100 3   110 112 300 400 500 ・AテーブルとBテーブルがあり、それぞれのテーブルのa、b、dフィールドのみを対象に、その値がAテーブルとBテーブルとで等しいかどうか調べたい。 (c、eフィールドの値が異なっていても、a、b、dフィールドの値が同じであればそのレコードはOKとし、a、b、dフィールドで1つでも異なる値があればNGとし、抽出したい。 例えば、Bテーブルの1、2レコードはOKだが、3レコードはNG) ・それぞれのテーブルのaフィールドが主キーになっている。 うまく説明できず、わかりにくいかもしれませんが、よろしくお願いします。

  • 複数の行を集約するSQLについて

    以下のテーブルのレコードをもとに A B C 1| あ | あ | 1 | 2| あ | い | 1 | 3| あ | う | 1 | 4| う | あ | 1 | 5| え | あ | 1 | 6| あ | あ | 2 | 7| あ | い | 2 | 8| あ | う | 2 | 9| う | あ | 2 | 以下のテーブルを作成したいと考えています。 A B C D E 1| あ | あ | 1 | あ | - | 2| あ | い | 1 | い | - | 3| あ | う | 1 | う | あ | 4| え | あ | 1 | - | え | 5| あ | あ | 2 | あ | - | 6| あ | い | 2 | い | - | 7| あ | う | 2 | う | あ | (1)カラムCを1つのグループとします。 (2)その中でカラムAの値が「あ」の場合は、カラムBの値をカラムDに設定する。 (3)カラムAの値が「あ」ではない場合は、カラムBの値をカラムEに設定する。 (4)カラムAの値とカラムBの値を入替えると同じ場合は(例では上の表の3と4、8と9のレコード)、 カラムAの値が「あ」でない方のレコード(4と9のレコード)のカラムBの値をカラムEに設定する。 (5)(4)で値を設定した方のレコードを削除する。 どのようなSQLを作成すればできるのでしょうか? SQLに詳しい方がいらっしゃれば、ご教授をお願います

  • SQLでテーブルを結合した結果を取り出し

    SQLで以下の様なテーブルがあります。 tableA、tableB、tableCを使って、IDとNUMとRANKを結合し、 ID毎に、 RANKが1つでもあったら、”○”でその数を RANKが1つもなかったら、”×”で0を 取り出したい。 「oracle10g」です。 -- tableA ID,NUM,NAME,・・・・・ 000001,001, 000001,002, 000001,003, 000002,001, 000003,001, 000003,002, -- tableB ID,NUM,RANK 000001,001,A 000001,001,B 000001,001,C 000001,002,A 000001,003,C 000002,001,B 000002,002,B 000003,001,A 000003,002,A 000003,002,C --tableC RANK,NAME A, B, C, 結果として、 ID,RANK,判定,個数 000001,A,○,2 000001,B,○,1 000001,C,○,2 000002,A,×,0 000002,B,○,2 000003,A,○,2 000003,B,×,0 000003,C,○,1 を得たいです。 どのようなSQLにしたらよいか、よろしくお願いします。

  • Access2003 複雑な条件のデータ抽出

    ☆1つのテーブルで、フィールド[A]~[C]があり、文字および英数字のデータが混在しています。 (ただし、フィールド[C]には、空欄(Null)になっている場合があります) =========================================================== (テーブル(1)) No  [A]      [B]    [C]     [D]      [E]      [F] 1   111      X    あ       2   222      X     か   3   333      X     さ  4   111      Y    た 5   222      Y   (Null)  6   333      Y     は 7   222      Z     ま   8   333      Z     や  9   111      Z    ら    =========================================================== [課題] (1) テーブル(1)のフィールド[A]の値を参照し、「111」の場合は、   フィールド[C]の値を[D]へ抽出する([B]でグループ化) (2) 同様に、フィールド[A]の値を参照し、「222」の場合は、   フィールド[C]の値を[E]へ抽出する([B]でグループ化) (3) 同様に、フィールド[A]の値を参照し、「333」の場合は、   フィールド[C]の値を[F]へ抽出する([B]でグループ化) (4) 新規クエリにて、上記課題(1)~(3)の条件を指定して実行すると    以下の抽出結果が表示される =========================================================== [抽出結果] (テーブル(2)) No  [B]    [D]    [E]      [F] 1   X     あ    か      さ     2   Y     た   (Null)    は   3   Z     ら    ま     や =========================================================== 別々のレコードにあるフィールド[C]の値を、条件に従い テーブル(2)のように1つのレコードにまとめたいのです。  大変恐縮ですが、私はSQLが書けないので、フィールド欄へ関数式を 入力して条件を指定しております。 できましたら、各フィールドへ入力する関数式を教えていただけると助かります。 また、関数だけでは出来ない場合は、SQLで教えていただければ幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。

  • データ処理に関する質問(Access VBAーDAO)

     AccessVBA初心者です。いつもお世話なっております。 環境 OSーXPsp2 office2003 テーブル1とテーブル2あって、テーブル1にデータはいってます。テーブル2は空です。 ACCESS VBA DAOで テーブル1のデータの[店名]、[氏名]を テーブル2に横に追加していきたいです。 テーブル2 構造 ID(オートナンバー)  [店名]1 [氏名]1 [店名]2 [氏名]2  --------------------------------------------------------- テーブル1のデータ ID(オートナンバー)  [店名] [氏名]   1           A    Aさん   2           B     Bさん    3           C     Cさん    4    D       Dさん ----------------------------------------------------- 結果 テーブル2 ID(オートナンバー)  [店名]1 [氏名]1 [店名]2 [氏名]2  1            A   Aさん   B   Bさん 2            C   Cさん   D   Dさん ACCESS VBAでの書く方 教えてください。宜しくお願い足します。