Tenho muitas consultas que retornam alguns dados estatísticos sobre um assunto em várias tabelas. O resultado inclui uma "classificação" que é uma de {"C","P","M"}. Quero que a consulta retorne as linhas na ordem {"M","P","C"}, ou seja, não é alfabética nem nenhuma ordenação interna.
Os dados são irrelevantes, mas digamos que eu queira consultar algo como a taxa de strike de um jóquei por essas classificações e ordenar o resultado por esses códigos nessa ordem. Espero que faça sentido?
Então, há uma maneira de criar um Collation Postgresql que pode me ajudar ou há outra maneira? Note que há muitas consultas, então uma cláusula CASE complexa não é minha solução preferida, pois eu teria que colocá-la em cada consulta (em cada programa que pode até conter sua própria consulta como um literal.
A
CASE WHEN
não deveria ser tão complexo:OBSERVAÇÃO:
ELSE 9
só é necessário quando existem outros valores além de 'M', 'P' ou 'C'.Mas também é possível sem uma
CASE WHEN
declaração, usando um ENUM :NOTA: Pode ser melhor alterar o tipo de coluna deste campo para
mpc
, para que ele possa ser usado em um índice. Isso deve acelerar a classificação.veja: DBFIDDLE
Você pode criar uma ordenação ICU com regras explícitas:
Este recurso está disponível a partir do PostgreSQL v16.