update type row_number over lead functions example enum postgresql sorting

type - update enum postgresql



¿Puede utilizar una función de comparación de Postgres personalizada para las cláusulas ORDER BY? (2)

En Python, puedo escribir una función de comparación de ordenación que devuelve un elemento en el conjunto {-1, 0, 1} y pasarlo a una función de ordenación como la siguiente:

sorted(["some","data","with","a","nonconventional","sort"], custom_function)

Este código ordenará la secuencia según el orden de intercalación que defino en la función.

¿Puedo hacer el equivalente en Postgres?

p.ej

SELECT widget FROM items ORDER BY custom_function(widget)

Edición: Ejemplos y / o punteros a la documentación son bienvenidos.


Podrías hacer algo como esto

SELECT DISTINCT ON (interval_alias) *, to_timestamp(floor((extract(''epoch'' FROM index.created_at) / 10)) * 10) AT TIME ZONE ''UTC'' AS interval_alias FROM index WHERE index.created_at >= ''{start_date}'' AND index.created_at <= ''{end_date}'' AND product = ''{product_id}'' GROUP BY id, interval_alias ORDER BY interval_alias;

En primer lugar, defina el parámetro que será su columna de pedido con AS . Podría ser una función o cualquier expresión SQL . Luego ORDER BY expresión ORDER BY y listo!

En mi opinión, esta es la forma más fácil de hacer este pedido.


Sí, puede, incluso puede crear un índice funcional para acelerar la clasificación.

Edición: Ejemplo simple:

CREATE TABLE foo( id serial primary key, bar int ); -- create some data INSERT INTO foo(bar) SELECT i FROM generate_series(50,70) i; -- show the result SELECT * FROM foo; CREATE OR REPLACE FUNCTION my_sort(int) RETURNS int LANGUAGE sql AS $$ SELECT $1 % 5; -- get the modulo (remainder) $$; -- lets sort! SELECT *, my_sort(bar) FROM foo ORDER BY my_sort(bar) ASC; -- make an index as well: CREATE INDEX idx_my_sort ON foo ((my_sort(bar)));

El manual está lleno de ejemplos de cómo usar sus propias funciones, simplemente comience a jugar con él.