ACC2000: Mittelwertbildung ohne besten und schlechtesten Wert

28/08/2007 - 13:21 von Michael Hessler | Report spam
Hallo,
beispielhaft folgende Datenliste:
ID-Prod Messwert
1 10
1 20
1 20
1 20
1 30
2 5
2 10
2 20
2 30
2 40
3 5
3 5
3 20
3 25
3 30
3 40
Nun wird der Mittelwert und die Messwert-Anzahl je ID-Prod ermittelt:
SELECT DISTINCTROW TMesswert.[ID-Prod], Avg(TMesswert.Messwert)
AS Mittel, Count(TMesswert.Messwert) AS Anzahl
FROM TMesswert
GROUP BY TMesswert.[ID-Prod];

Wie ermittele ich zusàtzlich den Mittelwert je ID-Prod ohne den
besten und schlechtesten Wert?
Für die ID 1 entfallen die Ergebnisse 10 und 30, d.h. MW .
Für die ID 3 müsste _ein_ Ergebnis 5 und das Ergebnis 40
wegfallen, d.h. MW wieder 20.
Danke.
Michael
 

Lesen sie die antworten

#1 André Minhorst
28/08/2007 - 13:47 | Warnen spam
Hi Michael,

Michael Hessler schrieb:
beispielhaft folgende Datenliste:
ID-Prod Messwert
1 10
1 20
1 20
1 20
1 30
2 5
2 10
2 20
2 30
2 40
3 5
3 5
3 20
3 25
3 30
3 40
Nun wird der Mittelwert und die Messwert-Anzahl je ID-Prod ermittelt:
SELECT DISTINCTROW TMesswert.[ID-Prod], Avg(TMesswert.Messwert) AS
Mittel, Count(TMesswert.Messwert) AS Anzahl
FROM TMesswert
GROUP BY TMesswert.[ID-Prod];

Wie ermittele ich zusàtzlich den Mittelwert je ID-Prod ohne den besten
und schlechtesten Wert?
Für die ID 1 entfallen die Ergebnisse 10 und 30, d.h. MW .
Für die ID 3 müsste _ein_ Ergebnis 5 und das Ergebnis 40 wegfallen, d.h.
MW wieder 20.



haben die Datensàtze mit den Produkt-IDs und den Messwerten auch ein
Primàrschlüsselfeld? Das wàre wichtig, denn dann könntest Du Deine
Abfrage so umgestalten, dass Du mit zwei weiteren Bedingungen die
besagten größten und kleinsten Werte ausschließen kannst - und zwar nur
jeweils einen davon, falls es mehrere gleiche gibt.

Da Du nach dem Gruppieren den größten und den kleinsten Wert
herausfiltern möchtest, ist das HAVING-Schlüsselwort Dein Freund.

Könnte ungefàhr so aussehen (nicht getestet):

SELECT DISTINCTROW T1.[ID-Prod], Avg(T1.Messwert) AS
Mittel, Count(T1.Messwert) AS Anzahl
FROM TMesswert AS T1
GROUP BY TMesswert.[ID-Prod]
HAVING T1.ID NOT IN (SELECT TOP 1 T2.ID FROM TMesswert As T2 WHERE
T2.[ID-Prod] = T1.[ID-Prod] ORDER BY T2.Messwert ASC)
AND T1.ID NOT IN (SELECT TOP 1 T2.ID FROM TMesswert As T2 WHERE
T2.[ID-Prod] = T1.[ID-Prod] ORDER BY T2.Messwert DESC);

Ciao
André

Ähnliche fragen