Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Standardabweichung mit SQL aggregation functions

Begonnen von Mak, Oktober 02, 2010, 09:42:03

⏪ vorheriges - nächstes ⏩

Mak

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

database


Mak

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

database


oma

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
nichts ist fertig!

Mak

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?

oma

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
nichts ist fertig!

Mak

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.

oma

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]
nichts ist fertig!

oma

#9
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
nichts ist fertig!

Mak

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

oma

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
nichts ist fertig!