- ベストアンサー
NULLを無視してgroup byは可能でしょうか
PostgreSQLです。 cd、nm、data1、data2 11、AA、xxxx、null 11、AA、null、zzzz 上記のようなテーブルをcd、nmでグループ化し以下のように取得したいです。 11、AA、xxxx、zzzz
- haya6848
- お礼率0% (0/1)
- PostgreSQL
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
select cd, nm, max(data1), max(data2) from hogehoge group by cd, nm PostgreSQLは知らないけど、一般的なSQLならこんな感じで書けますね。
関連するQ&A
- group byを使う時に条件をつけたいです。
どう頑張っても思いどうりにDBからデータがとれず困ってます... 例えばこんなテーブルがあったら(テーブル名が"test"、カラムが"name"と"id") table test name | id ---------- aa | 1 aa | 1 aa | 1 bb | 1 bb | 1 aa | 0 aa | 0 cc | 0 カラム"id"が0の時は、カラム"name"のgroup byせず カラム"id"が1の時だけ、カラム"name"のgroup byするには、どうすればいいのでしょう? このような感じにデータを取り出したいのです。 name | id | COUNT ---------- aa | 1 | 3 bb | 1 | 2 aa | 0 | 1 aa | 0 | 1 cc | 0 | 1 よろしくお願いします。
- ベストアンサー
- MySQL
- group by句
以下のSQL文がoracle9iでOKで8iで通らないのですが、8iでも通るようになんとかできないでしょうか。 select a.val_Id, (select val_nm from tableA where val_id = a.val_id) as val_nm from tableA a group by a.val_id テーブルの内容 tableA( val_id number(1,0), val_code number(2,0), val_nm varchar(10) ) val_idとval_codeで一意となっています。 val_nmはval_idと一対一になっています。 要するにval_idに対応するval_nmも一緒に取得したいのですが、select句のサブクエリで8iの場合"group byの式ではありません"とおこられてしまいます。 ちなみに、今ここでは簡略化しているのですが本来は色なテーブルを結合しているので、単にgroup by val_id,val_nmとするのは無しでお願いいたします。 わかりにくいかとは思いますがお知恵をお貸しください。宜しくお願いいたします。
- 締切済み
- Oracle
- 副問い合わせでのNULLの抽出方法
SQLについての質問です。 副問い合わせを使用したとき、NULLのデータも含めて抽出したいの ですが、どうもうまくいきません。 やりたいことを説明すると、まず以下の構造のテーブルがあります テーブル コード 金額 -------------- 01 |100 01 |110 02 |090 02 |080 03 |200 04 |100 04 |150 05 |400 09 |350 null |100 null |200 集約後データ コード -------- 01 |<--- 1件目 02 |<--- 2件目 03 |<--- 3件目 04 |<--- 4件目 05 |<--- 5件目 09 |<--- 6件目 null |<--- 7件目 まず、テーブルをコードで集約します。集約された結果のデータで上位○件と いう制御をかけたい為、ROWNUMを使用しています。 ただ、実際にほしいデータは集約する前のデータの為、一度集約とROWNUMを使って 絞りこんだデータを副問い合わせしています。 但し、このときNULLが入ったコードも取得する必要があります。 現在のSQLはこんな感じです。 SELECT コード、SUM(金額) FROM テーブル WHERE コード IN ( SELECT コード FROM テーブル WHERE ROWNUM <= 10 GROUP BY コード ) GROUP BY コード このSQLだと、NULLが省かれてしまうため上位6件までしか抽出できません。 実際、NULLを含んだデータを副問い合わせで取得することは可能でしょうか? データベースはオラクル9iです。 宜しくお願いします。
- ベストアンサー
- その他(データベース)
- group by がうまくいきません。
以下のようなデータがあります。 管理番号 ステータス 受付日 502035 50 2012/09/28 502035 30 2012/09/25 502035 40 2012/09/30 502036 10 2012/09/28 502036 20 2012/09/30 502037 10 2012/09/29 上記のテーブルを管理番号でグループ化し、 ステータスの一番小さい番号の受付日を抽出したいと 考えています。 管理番号 ステータス 受付日 502035 30 2012/09/25 502036 10 2012/09/28 502037 10 2012/09/29 ↑求めたいSQL内容 SELECT 管理番号, Min(ステータス), 受付日 FROM ステータステーブル GROUP BY 管理番号 で行うと、受付日が異なるステータスだと 複数抽出されてしまいます。 First(受付日) Last(受付日)にすると受付日が うまく抽出されません。 受付日をステータスが一番小さな管理番号 でグループ化し、表示することはできますでしょうか? よろしくおねがいいたします。
- ベストアンサー
- SQL Server
- 条件付group byについて
DBからデータを引き出したいのですがうまく引き出せず困っています。 条件付きでgroup byを行いたいのですが、そのような方法はありますでしょう? 条件とはあるカラムの要素の最初の文字だけでgroupbyしたいのです。 例えば table test aaa | bbb ---------- aab | 1 aac | 2 abg | a aac | 4 上記のようなテーブルがあったときカラムaaaの最初のに2文字だけgruou byして aa* | 3 ab* | 2 のようなものを出したいんです。 もし方法がわかる方がいればご指導鞭撻ください。
- ベストアンサー
- MySQL
- group by のソート
mysql Client API version 3.23.49 PHP/4.4.5 で動作させようと思っています。 table a b 1 2 3 4 2 4 7 1 2 6 1 6 上のデータから以下のような結果を得たいのですが table a b idcount1 1 6 2 3 4 1 2 6 2 7 1 1 グループで集計をとり、その上でbに6がある場合は6その他は bの値にNULLもしくは別の値が入るという形でいいのですが・・・ できません。 SELECT a, b, count( * ) AS idcount1 FROM table GROUP BY a するとはじめに読みこんだ値がbには入ってしまいます。 結果 table a b idcount1 1 2 2 3 4 1 2 4 2 7 1 1 SELECT a, b, count( * ) AS idcount1 FROM table where b=6 GROUP BY a するとbの値ははじきますし、カウントしている意味がなくなります。 結果 table a b idcount1 1 6 1 2 6 1 GROUP BY 処理前のソートを考え、from table後に oder by b=6 asc を使ったがエラー 末尾に oder by b=6 asc を使うと最初に試した値をソートするだけでした。 宜しくお願いいたします。
- ベストアンサー
- MySQL
- Null値を無視してユニークにしたい
下記のようなテーブルがあります。 ID aaa bbb 10 A01 11 12 B01 13 A02 14 A03 B02 ・IDは,主キー(レコードの登録時に,IDENTITYで自動的に取得) ・aaa,bbbは,任意のタイミングで入力や編集があるが,ユニーク性を保ちたい ・aaa,bbbの入力に関しては,下記のようなテーブルを作って自動採番にしたい Category Last_No A 03 B 02 (1)データベース側にて,aaa,bbbにユニークインデックスを設定すると, Null値に関しても重複違反になってしまったのですが, これは,そういうものなのでしょうか? (2)ユニークインデックスが設定できない場合に, Null値以外の値が,ユニークである事を保つためには, どうすれば良いのでしょうか? 自動採番だけでなく,編集も有り得るため,悩んでいます。 (編集は,A01-1のように,枝番を付ける場合が多いです) 以上,どなたかご教示願います。
- ベストアンサー
- SQL Server
- order by int型の降順(DESC)でnullも混ざっている時、nullは下の方にするには?
すみません。 postgreSQLでint型をorder byする時、 null も混ざっているのですが、 null は下の方の順番(1より下(0以下はないとして))に来るようにするには、 通常どのように書くものでしょうか??? もしかしたら簡単な事かもしれなくて、 もうしわけないのですが、どなたかよろしくおねがいします。
- ベストアンサー
- PostgreSQL
- mysqlでカンマデータのgroup by
初めての質問になります。 以下のようなテーブルで、dataカラムにカンマ区切りのデータを保存しているのですが、こちらはgroup byやcount等を使ってSQL一発で集計結果を取得できるのでしょうか? SELECT count(*) FROM TEST WHERE FIND_IN_SET('1', data)で1から順番に取得は出来るのですが、数が多いとちょっといかがなものかと思い、質問させていただきました。 環境:mysql5.5 ------------ |data ------------ |1,2,3 ------------ |1,2,10 ------------ |1,2,3,10 ------------ 期待する結果は以下のような感じです。 1|3 --------- 2|3 --------- 3|2 --------- 10|2
- ベストアンサー
- MySQL
- GROUP BYの記述方法について
GROUP BYの記述方法について教えてください --------------------- 受注データ(テーブル) --------------------- 品目CD 受注数 00001 10 00001 10 00002 20 00002 15 --------------------- 品目マスタ(テーブル) --------------------- 品目CD 品目名 00001 えんぴつ 00002 けしごむ 00003 色鉛筆 上記二つのDBから、品目ごとの受注数の合計を取得するときのSQL文として、どうするのが正しいのでしょうか? --------------------- 欲しい結果 --------------------- 品目CD 品目名 受注数 00001 えんぴつ 20 00002 けしごむ 35 (考えられるSQL) CASE1:受注データの品目CDと品目マスタの品目名のグループ化 SELECT A.品目CD, B.品目名, SUM(A.受注数) FROM 受注データ A, 品目マスタ B WHERE A.品目CD = B.品目CD GROUP BY A.品目CD, B.品目名 CASE2:受注データをグループ化した結果と品目マスタを結合 SELECT X.品目CD, X.受注数合計, Y.品目名 FROM (SELECT 品目CD, SUM(受注数) FROM 受注データ GROUP BY 品目CD)X,品目マスタ Y WHERE X.品目CD = Y.品目CD CASE3:品目マスタの品目CDと品目名のグループ化 SELECT B.品目CD, B.品目名, SUM(A.受注数) FROM 受注データ A, 品目マスタ B WHERE A.品目CD = B.品目CD GROUP BY B.品目CD, B.品目名 レスポンスも含めて教えてください。 よろしく、お願いします。
- ベストアンサー
- Oracle