Calcula o valor mediano para o intervalo valores em uma janela ou partição. Valores NULL no intervalo são ignorados.
MEDIAN é uma função de distribuição inversa que assume um modelo de distribuição contínua.
Sintaxe
MEDIAN ( median_expression ) OVER ( [ PARTITION BY partition_expression ] )
Argumentos
- median_expression
-
Uma expressão, tal como um nome de coluna, que fornece os valores para os quais determinar a mediana. A expressão deve ter um tipo de dados numérico ou de datetime ou ser implicitamente conversível para um.
- OVER
-
Uma cláusula que especifica o particionamento da janela. A cláusula OVER não pode conter uma especificação de ordenação de janela ou de quadro de janela.
- PARTITION BY partition_expression
-
Opcional. Uma expressão que define o intervalo de registros para cada grupo na cláusula OVER.
Tipos de dados
O tipo de retorno é determinado pelo tipo de dados de median_expression. A tabela a seguir mostra o tipo de retorno para cada tipo de dados de median_expression.
Tipo de entrada | Tipo de retorno |
---|---|
INT2, INT4, INT8, NUMERIC, DECIMAL | DECIMAL |
FLOAT, DOUBLE | DOUBLE |
DATE | DATE |
Observações de uso
Se o argumento de median_expression é um tipo de dados DECIMAL com a precisão máxima de 38 dígitos, é possível que MEDIAN retorne um resultado impreciso ou um erro. Se o valor de retorno da função MEDIAN excede 38 dígitos, o resultado é truncado, o que causa a perda de precisão. Se, durante a interpolação, um resultado intermediário excede a precisão máxima, um excedente numérico ocorre e função retorna um erro. Para evitar essas condições, recomendamos o uso de um tipo de dados com menor precisão ou a conversão do argumento median_expression para uma precisão mais baixa.
Por exemplo, uma função SUM com um argumento DECIMAL retorna uma precisão padrão de 38 dígitos. A escala do resultado é a mesma que a escala do argumento. Portanto, por exemplo, uma SUM de uma coluna DECIMAL(5,2) retorna um tipo de dados DECIMAL(38,2).
O seguinte exemplo usa uma função SUM no argumento median_expression de uma função MEDIAN. O tipo de dados de coluna PRICEPAID é DECIMAL (8,2), portanto a função SUM retorna DECIMAL(38,2).
select salesid, sum(pricepaid), median(sum(pricepaid))
over() from sales where salesid < 10 group by salesid;
Para evitar a perda potencial de precisão ou um erro de sobrecarga, converta o resultado para um tipo de dados DECIMAL com menor precisão, conforme exibido no exemplo a seguir.
select salesid, sum(pricepaid), median(sum(pricepaid)::decimal(30,2))
over() from sales where salesid < 10 group by salesid;
Exemplos
O seguinte exemplo calcula a quantidade mediana de vendas para cada vendedor:
select sellerid, qty, median(qty)
over (partition by sellerid)
from winsales
order by sellerid;
sellerid qty median
---------------------------
1 10 10.0
1 10 10.0
1 30 10.0
2 20 20.0
2 20 20.0
3 10 17.5
3 15 17.5
3 20 17.5
3 30 17.5
4 10 25.0
4 40 25.0
Para uma descrição da tabela WINSALES, consulte Amostra de tabela para exemplos de funções de janela.