Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Mak am Oktober 02, 2010, 09:42:03

Titel: Standardabweichung mit SQL aggregation functions
Beitrag von: Mak am Oktober 02, 2010, 09:42:03
Guten Morgen,

ich möchte gerne wissen wie man die Standardabweichung mit MIN, MAX, COUNT oder SUM in einen SQL Code schreiben kann.
Ich möchte nämlich die Vola der Gehälter aller Arbeitnehmer berechnen.
Vielen dank.

gruss
Mak
Titel: Re: Standardabweichung mit SQL aggregation functions
Beitrag von: database am Oktober 02, 2010, 09:47:36
Auch guten Morgen,

vielleicht findest du hier, was du suchst?

http://office.microsoft.com/de-at/access-help/CH001049957.aspx (http://office.microsoft.com/de-at/access-help/CH001049957.aspx)

HTH

Peter
Titel: Re: Standardabweichung mit SQL aggregation functions
Beitrag von: Mak am Oktober 02, 2010, 09:50:01
danke für die schnelle antwort.
aber ich darf diese funktion nicht verwenden StDev, StDevP (Funktion)
d.dh ich muss die gleiche funktionsabfrage über die oben genannten funktionen abbilden
Titel: Re: Standardabweichung mit SQL aggregation functions
Beitrag von: database am Oktober 02, 2010, 09:56:52
Oje - Hausaufgabe?

Na dann sieh mal da - besonders den letzten Beitrag

http://www.wer-weiss-was.de/theme50/article1801248.html (http://www.wer-weiss-was.de/theme50/article1801248.html)

HTH
Titel: Re: Standardabweichung mit SQL aggregation functions
Beitrag von: oma am Oktober 02, 2010, 11:32:59
Hallo,

mit 2 Abfragen evt. so

1. Abfrage: qryA1

SELECT ([X1]-DAvg("x1","DeineTabelle"))*([X1]-DAvg("x1","DeineTabelle")) AS AA FROM DeineTabelle

2. Abfrage:

SELECT DStDev("x1","DeineTabelle") AS StAb_Funktion,
Sum(Abfrage7.AA) AS SU,
Sqr(1/(DCount("x1","DeineTabelle")-1)*[SU]) AS StAb_Berechnung
FROM qryA1
GROUP BY DStDev("x1","DeineTabelle");


wobei StAb_Funktion die Standartdabweichung aus einer Funktion nur zum Vergleich ist
man kann sich auch noch die Mühe machen u. beide Abfragen verschachteln

Gruß Oma
Titel: Re: Standardabweichung mit SQL aggregation functions
Beitrag von: Mak am Oktober 02, 2010, 11:45:11
Ich habe nun ein Ergebnis erhalten:

SELECT Sqr(sum (salary^2)/Count(*)-(Sum(Staff.salary)/Count(salary))^2)

FROM Staff;

Beispielzahlen: salary: 9000, 12000,18000,30000,24000,90000

Problem: Ich erhalte nun über meine Formel die Varianz (62000) sowie die Vola (7874) der Grundgesamtheit

              Jedoch legt MS Access die Varianz bzw. Vola der (gezogenen) Stichprobe über die Funktion StDev(Ausdruck) zugrunde.

             Weiß jemand wie ich nun auch die Stichprobenvarianz/-vola erhalte?
Titel: Re: Standardabweichung mit SQL aggregation functions
Beitrag von: oma am Oktober 02, 2010, 11:52:45
Hallo Mak,

du gehst so einfach über meinen Vorschlag hinweg?

und :
ZitatBeispielzahlen: salary: 9000, 12000,18000,30000,24000,90000

eine DB wertet immer Messwerte u.a. immer Spaltenweise aus! Deine Beispielzahlen sieht ja nach Excel aus.

Gruß Oma
Titel: Re: Standardabweichung mit SQL aggregation functions
Beitrag von: Mak am Oktober 02, 2010, 12:06:56
Zitatdu gehst so einfach über meinen Vorschlag hinweg?

nein, bin ich gar nicht. aber ich darf wie oben beschrieben nur MIN,MAX,SUM und COUNT   verwenden.

Und du verwendest u.a. DAvg.
Jedoch finde ich diesen Lösungsansatz durchaus interessant, den ich mir auf jedenfall abspeichern werde.

Ich habe eine Tabelle in Access "Staff" mit 8 Spalten u.a. Salary mit den entprechenden Zeilen 9000 für Staff1 usw.
Titel: Re: Standardabweichung mit SQL aggregation functions
Beitrag von: oma am Oktober 02, 2010, 12:55:41
Hallo,

falls du zu Sum und Count auch DSum und DCount benutzen darfst, dann könnte mein kleines Beispiel nutzen

Gruß Oma

[Anhang gelöscht durch Administrator]
Titel: Re: Standardabweichung mit SQL aggregation functions
Beitrag von: oma am Oktober 03, 2010, 10:29:12
Hallo Mak,

zu deinen Fragen in der PN  (alle Fragen gehören ins Forum; so können immer mehrere mitlesen und mitdenken!)

1. Mein Lösungsansatz hehört nicht zur gehobenen Programmierung!
Es ist vielmehr ein Basteln, um die Standardabweichung aus der Definition mit den einzelnen Bestandteilen zu ermitteln. Ungewöhnlich, da diese Funktion ja in Access vorhanden ist u. es für euch wahrscheinlich nur ein Knobelaufgabe sein soll um zu sehen, inwieweit ihr mit Access "experimentieren" könnt.

Erläuterungen:

Es liegt ein Tabelle Messungen vor, in der Werte zu einem Meßpunkt P verschiedene Meßwerte x1 gespeichert sind

P  X1
1  9000
2  12000
3  18000
4  30000
5  24000
6  90000


Die Ermittlung der Standardabweichung für X1 ist nun mit Access einfach, da hierzu eine Funktion vorhanden ist.
Zur "Berechnung" dieser Standardabweichung mit anderen Funktionen

1. qry1: SELECT Messungen.X1,
DSum("x1","Messungen") AS S,
DCount("x1","Messungen") AS N,
S]/[N] AS Mittelw,
([X1]-[Mittelw])*([X1]-[Mittelw]) AS SU
FROM Messungen


Hierin ist S die Summe aus den X1-Werten; N die Anzahl der Meßwerte u. aus beiden Werten ist Mittelw der berechnete Mittelwert (durfte ja auch nicht mit Access-Funktion ermittelt werden)

Mit diesen Werten eine 2. Abfrage:

SELECT DStDev("x1","Messungen") AS StAb_Funktion,
Sum(qry1.SU) AS SU,
First(qry1.N) AS N,
Sqr(1/([N]-1)*[SU]) AS StAb_Berechnung
FROM qry1
GROUP BY DStDev("x1","Messungen");


Hierbei ist DStDev die Access-Funktion für die Standardabweichung, die nur zum Vergleich in der Abfrage ist.

Mit SU und N wird mit Sqr(1/([N]-1)*[SU]) die Standardabweichung "nachgebaut" u. wie du im Beispiel siehst, stimmen die Werte von StAb_Funktion (Access-Funktion für Standardabw.) und  StAb_Berechnung (nachgebaute Funktion)  im Beispiel überein.

Vielleicht gibt es noch mit einen kürzeren bzw. eleganteren Weg?

Wenn du das mit deinen Bezeichnungen nachempfinden willst, musst du nur die gleiche Tabellenstruktur haben und dann die einzelen Bezeichnungen in der Tabelle und den Abfragen übernehmen.


Gruß Oma
Titel: Re: Standardabweichung mit SQL aggregation functions
Beitrag von: Mak am Oktober 03, 2010, 13:31:25
danke für die ausführlichen Erläuterungen!

eine frage habe ich noch bezgl. querry2

ZitatSELECT DStDev("x1","Messungen") AS StAb_Funktion, Sum(qry1.SU) AS SU, First(qry1.N) AS N, Sqr(1/([N]-1)*[SU]) AS StAb_BerechnungFROM qry1GROUP BY DStDev("x1","Messungen");

auf welches N bezieht sich diese Funktion Sqr(1/([N]-1)*[SU]) AS StAb_Berechnungen?

und: was bewirkt First(qry1.N), denn bei mir gibt es Probleme bei der Ausfürhung in Access
Titel: Re: Standardabweichung mit SQL aggregation functions
Beitrag von: oma am Oktober 03, 2010, 13:47:24
Hallo,

N ist die Anzahl der Werte in der Tabelle, sie wird in qry1 ermittelt.

Da in qry2 eine Gruppierung stattfindet, wird dort N als erster Wert aus der Gruppe genommen, du kannst ebenso "letzter Wert" benutzen.

Gruß Oma