
No.2ベストアンサー
- 回答日時:
>今回の場合、かまわないという状況
だとすると以下のSQLで問題ないんじゃないでしょうか?
>select * from (select distinct on (aaa) * from bbb) as ccc order by ddd
基本的にdistinctを置き換えるのはgroup byだと思いますが、この場合group byでは面倒なので、distinctで良いと思います。
(再帰結合とかすればいけそうな気もするけど、できても多分すげーめんどいと思う)
5ヶ月間があいてしまいました。
すみません。
おかげさまで、「とりあえず これでいっか」と思えました(^-^;
PostgreSQLとMySQLを触る機会がありまして、いろいろ勉強していた時期でした。
ありがとうございました。
No.1
- 回答日時:
>select * from (select distinct on (aaa) * from bbb) as ccc order by ddd
distinctってほとんど使わんのであれですが、このSQLだと以下のような場合結果が不定になりませんか?
(aaaが重複している場合、from内のselectでdddの2が返るか、3が返るか特定できない)
http://www.postgresql.jp/document/pg800doc/html/ …
aaa ddd
1 2
1 3
#普通にこんな感じでOKらしいです。
#select distinct on (aaa) * from bbb order by ddd
>パフォーマンス的にも良いSQL
PostgreSQLのdistinctはそんなによくないようです。
(Oracleとかだと早いらしいですが)
http://www2b.biglobe.ne.jp/~caco/fourth_edition/ …
Group By (*)ができないので、*がほしいならdistinctの方がいいかもしれませんが、それ以外ならGroup Byの方がいいかも。
(Group Byの方が移植性高そうだし)
この回答への補足
レスありがとうございます。
> (aaaが重複している場合、from内のselectでdddの2が返るか、3が返るか特定できない)
は、実は今回の場合、かまわないという状況です。
なぜ困っているかといいますと、postgresでは、
select distinct on (aaa) * from bbb order by aaa, ddd
このように書かねばならないようです。
distinct on (~)で指定したフィールドが、order by の最初に現れないといけないと。
つまり、aaa順になるので、並び替えたくても並び変わらないんです (--;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つの列からの最大値取得
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
-
SQLで、Join句で結合したテ...
-
sqlに記述できない文字
-
エラーを起こす方法
-
既存データをINSERT文にして出...
-
UPDATEで既存のレコードに文字...
-
改行を含んだデータのインポート
-
PostgreSQLのtimestamp型で時間...
-
ADO+ODBCでテーブルに接続する...
-
selectの単純繰り返し
-
既にテーブルが存在する場合の...
-
【SQL】項目に紐づいている情報...
-
SELECT文の結果をDEFINEの値と...
-
データベース ユーザの「このユ...
-
SQLサーバに対するSQL文で抽出...
-
Accessの構成をコピーしたい
-
timestampのデータはどのように...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLのこと:distinctして並び替...
-
access2000のクエリについて
-
2つの列からの最大値取得
-
フィールドを結合して検索
-
直近2年度連続で減少していない...
-
複数行の結果を単一列に連結
-
SQLで期間をずらした集計処理
-
order byで並び変えし最大値の...
-
同一フィールドの違う値ごとに...
-
????
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
-
sqlに記述できない文字
-
SQLサーバに対するSQL文で抽出...
-
UPDATEで既存のレコードに文字...
-
エラーを起こす方法
-
truncate tableを使って複数の...
-
既存データをINSERT文にして出...
-
timestampのデータはどのように...
おすすめ情報