2017-07-10 3 views
2

Ich versuche, die Standardabweichung von einer Tabelle zu erhalten, die Einkommenswerte enthält, die grundlegenden mathematischen Funktionen unten in postgresql verwendend.Finden von Standardabweichung mit grundlegenden mathematischen Funktionen

Dies ist, was ich versucht:

SELECT sqrt(sum(power(income - (sum(income)/count(income)), 2))/(count(*) - 1)) FROM income_data 

aber ich halte die folgende Fehlermeldung erhalten:

ERROR: aggregate function calls cannot be nested 

Hat jemand in dieser Frage laufen? Ich habe das Gefühl, dass die Logik für das Erreichen der Standardabweichung funktionieren sollte, obwohl ich bis jetzt noch kein Glück hatte. Ich schätze jegliche Vorschläge zur Lösung.

+1

Verwenden Sie einfach 'stddev()'. Keine Notwendigkeit, das Rad neu zu erfinden. –

+0

Ja, ich bin mir bewusst, dass stddev dies einfacher macht, die Idee ist jedoch, die grundlegenden mathematischen Funktionen wie die oben aufgeführten zu verwenden und das gleiche Ergebnis wie bei der Verwendung von stddev zu erreichen – AnchovyLegend

Antwort

4

Sie sollten einen Mittelwert in einer separaten Abfrage berechnen, z. in einer with-Anweisung:

with mean as (
    select sum(income)/count(income) as mean 
    from income_data 
) 
select sqrt(sum(power(income - mean, 2))/(count(*) - 1)) 
from income_data 
cross join mean; 

oder in einer abgeleiteten Tabelle:

select sqrt(sum(power(income - mean, 2))/(count(*) - 1)) 
from income_data 
cross join (
    select sum(income)/count(income) as mean 
    from income_data 
) s; 
Verwandte Themen