• 締切済み

テーブルのソート

postgresqlでソートする処理があります。 データとして、例えば、項目名をgrp,data とするとして grp,data 0,あああ 1,いいい 3,ううう 0,えええ 5,おおお 0,かかか 0,ききき 2,くくく というようなデータを 1,いいい 3,ううう 5,おおお 2,くくく 0,あああ 0,えええ 0,かかか 0,ききき というように取り出したいのです。 言葉にすると grpを0と0以外で抽出し、その中でdataソート(0以外の中からが優先) みたいな感じでしょうか。 二つのsqlを使えばできるでしょうが、なんとかひとつのsqlでできないでしょうか? よろしくお願いいたします。

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

UNIONは 取得するカラム数が同じ2つ以上のSQL文の結果を 結合するものよ だから今回にはぴったりのはず なのになぜ最後にorder byしちゃうの!? 1以上をorder byしたものと 0だけのをUNIONすればいいの

jg1wjz
質問者

お礼

askaaska さん、ありがとうございます。 最初にそのようにしたのですが    "union"またはその近辺で構文エラー になったんです。 で、order by をはずしたらエラーは消えたのですが それではまずいので 最後にorder byを追加したらエラーがでなかったもんで。^^; いろいろありがとうございました。

jg1wjz
質問者

補足

今、CASE WHEN を使って 自己解決しました! ・・・CASE WHEN grp>0 THEN 0 ELSE 1, data 昨日から悩んでいたので、ホッとしてます。 アドバイス、有難うございました。

すると、全ての回答が全文表示されます。
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

grp >0 と grp=0 の結果を UNIONで結合すればいいと思うわ

jg1wjz
質問者

お礼

askaaskaさん、ありがとうございます。 試してみました。 unionを使ったことが無いので、 のせいかもしれませんが 思ったように取り出せませんでした。 最初のselect sqlで、where grp>0 もうひとつのselect で where grp<1 にして union で結合、最後に order by data にしました。 結果は 二つのselectが交じり合ったシンプルな(!)結果でした。 何か間違っていますか? tableは同じtableだとダメですか? 最初の結果を最初に取り出してから、 二つ目のselect結果をその後に取り出したいのですが。 よろしくお願いします。

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

関連するQ&A