Então criei um procedimento que calcula a média e a mediana de um array de strings de números:
CREATE PROCEDURE dbo.spAvg_Median
@input nvarchar(20)
AS
BEGIN
declare @split table(id int primary key identity (1,1), number int)
INSERT INTO @split SELECT value FROM string_split(@input, ',')
SELECT Average FROM (
SELECT SUM(number)/COUNT(number) as [Average]
FROM @split
) AS T1
UNION
SELECT Median FROM (
SELECT o.number AS [Median], rn=ROW_NUMBER() OVER (ORDER BY o.number), c.c
FROM @split AS o
CROSS APPLY (SELECT c=COUNT(*) FROM @split b) AS c
) AS x
WHERE rn IN ((c + 1)/2, (c + 2)/2)
END
RETURN 0
GO
No entanto, quando você executa essa consulta, obtém o seguinte resultado:
EXEC dbo.spAvg_Median'1,5,9,8,7'
O que eu quero que ele produza é Média em uma coluna e Mediana em outra coluna próxima a ela.
O comando UNION está lá para que ele não o produza como duas consultas diferentes como esta, pois não é isso que eu quero:
De acordo com a regra para encontrar a mediana (média se número par de valores e número do meio se número ímpar de valores). Pode ser feito assim.
Obrigado!