複雑な基準のためにSQL順序を使用する
-
29-09-2020 - |
質問
私の関係がとても
のような言ってみましょうランクで並べ替えたいのですが、A'SとBは最初です。だから私の関係は
のように見えるでしょう最初に私は2つの関係を持っていましたが、2つの関係を順番に注文してから、2つの関係を統合しましたが、彼らはまったく魅力的になったばかりです。私はケースを使ってみましたが、それがどのように機能するのかわかりません。整数の文字を混在させることについてのエラーが発生し続けました。
編集:上記の最初の関係が、やや複雑なビューの後に終わるものであることを言及するのを忘れました。たとえば、2つのビューを作成しました。これはAとBクラスしか持ち、その後ランクでそれを注文しました。 2番目のCクラスを見て、ランクでそれを注文しました。それから私はそれらを団結させました、しかし彼らはただ混合されます。
解決
CASE
では、行を2つのグループに分割するためだけに、クラス 'a'または 'b'を持つものが最初のグループ(ORDER BY
)と2番目のすべてのグループに配置されます(1
):
ORDER BY
CASE WHEN class IN ('A', 'B') THEN 1 ELSE 2 END,
rank ;
. 他のヒント
私はそれを行う方法の一例を与えるつもりです。
CTESとWITH
href="http://www.postgresql.org/docs/9.4/static/queries-with.html" rel="nofollow"> ctes あなたを許可する一時的な単一クエリテーブルのような構造を形成するには、1回のクエリでCTEをもう1つ依存することができるため、クエリの半手続き型を作るための便利でわかりやすい方法を提供します。
あなたの場合は、
を試してみてくださいWITH AB_results AS(
SELECT class, rank, 1 AS hidden_rank
FROM my_relation
WHERE class IN ('A','B')
),
Non_AB_results AS(
SELECT class, rank, 2 AS hidden_rank
FROM my_relation
WHERE class NOT IN ('A','B')
)
SELECT COALESCE(AB_results.class,Non_AB_results.class), rank
FROM AB_results
FULL OUTER JOIN Non_AB_results
USING(hidden_rank,rank)
ORDER BY hidden_rank, rank;
.
ここで2,3分でSQLFIDDLEをまとめようとしています。 :p
編集:私は小さなエラーをしました。私たちが話すときに例でそれを掃除しようとしています。
編集2:エラーが修正されました。残念ながら、SQLFIDDLEは今やほんの少しのトラブルを持っていますが、 ここ いくつかのテストのためのSQLFIDDLEへのリンク。
私が最も優れた可能な方法でこれを解決しなかったかもしれないに注意してくださいが、それはあなたの問題を解決するべきです。