sql ORDER BY 複数の値を特定の順序で実行しますか? 質問する

sql ORDER BY 複数の値を特定の順序で実行しますか? 質問する

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

例:

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

pseudo: 結果を次のように並べたいのですが、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')、複数の検証テストに1つのクエリを使用しようとしているため、すべての値が必要です。また、x_fieldの値はDESC/ASC順ではありません。

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

ベストアンサー1

...
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 -- fallback for values not inside the IN clause. eg : x_field = 'b'
   END, id

おすすめ記事