1. ホーム
  2. sql

[解決済み] sql ORDER BY 複数の値を特定の順序で並べる?

2022-07-03 12:41:18

質問

私はインデックス付きのキーとインデックスなしのフィールドを持つテーブルを持っています。 私は特定の値を持つすべてのレコードを検索し、行を返す必要があります。 私は複数の値によって順序付けることができるかどうかを知りたいです。

id     x_field
--     -----
123    a
124    a
125    a
126    b
127    f
128    b
129    a
130    x
131    x
132    b
133    p
134    p
135    i

擬似:結果をこのような順序で表示させたい。 where ORDER BY x_field = 'f', 'p', 'i', 'a'

SELECT *
FROM table
WHERE id NOT IN (126)
ORDER BY x_field 'f', 'p', 'i', 'a'

という結果になるわけです。

id     x_field
--     -----
127    f
133    p
134    p
135    i
123    a
124    a
125    a
129    a

構文は有効ですが、クエリを実行すると、1レコードに制限しても、結果が返りません。これについての他の方法はありますか?

x_fieldをテスト結果と考え、その条件に該当するすべてのレコードを検証する必要があります。私はテスト結果を失敗した値、合格した値の順に並べたいと思いました。そこで、まず失敗した値を検証し、次にORDER BYを使用して合格した値を検証することができます。

できないこと

  • 私は特定のレコードの値を返す必要があるとして、GROUP BY

この質問を書いた後、私はこれを考え直す必要があると思い始めています、笑

どのように解決するのですか?

...
WHERE
   x_field IN ('f', 'p', 'i', 'a') ...
ORDER BY
   CASE x_field
      WHEN 'f' THEN 1
      WHEN 'p' THEN 2
      WHEN 'i' THEN 3
      WHEN 'a' THEN 4
      ELSE 5 --needed only is no IN clause above. eg when = 'b'
   END, id