O PostgreSQL é any_value
realmente arbitrário ao usar ORDER BY?
A documentação afirma:
any_value ( anyelement ) → igual ao tipo de entrada
Retorna um valor arbitrário dos valores de entrada não nulos.
Consultas de exemplo:
-- nonsensical
WITH vals (v) AS ( VALUES (1),(3),(4),(3),(2) )
SELECT any_value(v ORDER BY v = 3 DESC) FROM vals;
-- more realistic example
SELECT any_value(username ORDER BY user_id DESC) AS a_username FROM users;
Eu vi que a documentação da versão 17 inclui a seguinte cláusula:
Embora todos os agregados abaixo aceitem uma cláusula ORDER BY opcional (conforme descrito na Seção 4.2.7), a cláusula só foi adicionada aos agregados cuja saída é afetada pela ordenação.
Mas não menciona se a saída de any_value é afetada pela ordenação.
Com base em alguns testes, parece ser determinístico. (provavelmente porque any_value
retorna apenas o primeiro valor não nulo e respeita a ORDER BY)
Como pergunta complementar, se não for arbitrário, seria "ruim" confiar nesse comportamento?