GESTUTZTMITTEL in MySQL
Naps
- datenbank
Hi,
gibt es die Excel-Funktion GESTUTZTMITTEL auch in MySQL? Oder wie könnte ich sonst noch zum selben Ergebnis kommen?
Danke!
MfG Naps
Moin
gibt es die Excel-Funktion GESTUTZTMITTEL auch in MySQL? Oder wie könnte ich sonst noch zum selben Ergebnis kommen?
Eine direkte funktion ist mir nicht bekannt. Du kannst aber 2 subselects in der bedingung mit dem höchst und niedrigstwert als ausschlusskriterium vereinbaren
Ungefähr so
Select avg(zahl) from table where zahl != (Select zahl from table order by zahl desc limit 0,1) and zahl != (select zahl from table order by zahl asc limit 0,1)
Gruß Bobby
Moin
Oh, ich vergas die Codeformatierung
SELECT AVG(zahl)
FROM `table`
WHERE
zahl != (SELECT zahl FROM `table` ORDER BY zahl DESC LIMIT 0,1)
AND
zahl != (SELECT zahl FROM `table` ORDER BY zahl ASC LIMIT 0,1)
Gruß Bobby
SELECT AVG(zahl)
FROMtable
WHERE
zahl != (SELECT zahl FROMtable
ORDER BY zahl DESC LIMIT 0,1)
AND
zahl != (SELECT zahl FROMtable
ORDER BY zahl ASC LIMIT 0,1)
Danke, so ungefähr habe ich mir das auch vorgestellt. Gibt es eine simple Möglichkeit wie ich nicht nur den größten und kleinsten Wert ausschließe sondern z.B. 10% der Min- und 10% der Max-Werte?
MfG Naps
Moin
Gibt es eine simple Möglichkeit wie ich nicht nur den größten und kleinsten Wert ausschließe sondern z.B. 10% der Min- und 10% der Max-Werte?
Da ist die Frage ob 10% an der Anzahl oder an den Werten gemessen werden sollen.
So oder so,Einfach sollte dies nicht sein. Also um deine FRage zu beantworten. Aus meiner Sicht heraus gibt es KEINE simple Lösung. Ich lass mich aber gern eines besseren belehren.
Gruß Bobby
Moin
Aus meiner Sicht heraus gibt es KEINE simple Lösung. Ich lass mich aber gern eines besseren belehren.
Interessehalber hab ich jetzt mal kurz ne Lösung gesucht und sogar gefunden. So schwer ist das gar nicht
SELECT AVG(zahl) FROM `table`,
(SELECT @row:=0) r
WHERE (@row:=@row+1)
BETWEEN
((Select COUNT(zahl) FROM `table`) * 0.1 )
AND
( (Select COUNT(zahl) FROM `table`) - ( (Select COUNT(zahl) FROM `table`) * 0.1 ) )
ORDER BY zahl ASC
@row ist dabei die Zeilennummer die hochgezählt wird als Variable. Nun braucht man nur die Gesamtanzahl (COUNT (zahl)) und kann dort eine Prozentzahl abziehen (0.1 = 10%)
Damit kann man, wenn man die Tabelle Aufsteigend sortiert hat, alle Werte erfassen, deren Zeilennummer den Vorgaben entsprechen.
Ich bin grad etwas selbst überrascht wie einfach dies zu lösen ist.
Gruß Bobby
Moin
Ich bin grad etwas selbst überrascht wie einfach dies zu lösen ist.
huiuiuiui Es geht noch einfacher
SELECT AVG( zahl )
FROM
`table`, ( SELECT @row:=0 ) r, ( SELECT @rows:=COUNT( zahl ) FROM `table` ) p
WHERE
( @row:=@row + 1 )
BETWEEN ( @rows * 0.1 ) AND ( @rows - ( @rows * 0.1 ) )
ORDER BY zahl ASC
Gruß Bobby
Moin
Ich weiß, ich führe Selbstgespräche. Mein Drang zur Optimierung ist aber gerade mal geweckt.
Nun aber die für mich handlichste Lösung:
SELECT AVG( zahl )
FROM
`table`, ( SELECT @row:=0, @rows:=COUNT( zahl ) FROM `table` ) r
WHERE
( @row:=@row + 1 )
BETWEEN ( @pct:=@rows * 0.1 ) AND ( @rows - @pct )
ORDER BY zahl ASC
Vorteil: nur noch an einer Stelle muss der Prozentsatz angepasst werden. So, nun aber gut zu dem Thema. Es sei denn es hat noch jemand eine weltbewegende Möglichkeit zur Verbesserung der Abfrage. :)
Gruß Bobby
Moin
AHHHHHHHHH
SELECT AVG( zahl )
FROM
`table`,
( SELECT @row:=0, @pct:=( @rows:=COUNT( zahl ) ) * 0.1 FROM `table` ) r
WHERE
( @row:=@row + 1 )
BETWEEN
@pct AND ( @rows -@pc t)
ORDER BY id ASC
Gruß Bobby
Moin
letzte Korrektur:
SELECT AVG( zahl )
FROM
`table`,
( SELECT @row:=0, @pct:=( @rows:=COUNT( zahl ) ) * 0.1 FROM `table` ) r
WHERE
( @row:=@row + 1 )
BETWEEN
@pct AND ( @rows - @pct )
ORDER BY zahl ASC
Gruß Bobby
SELECT AVG( zahl )
FROM
table
,
( SELECT @row:=0, @pct:=( @rows:=COUNT( zahl ) ) * 0.1 FROMtable
) r
WHERE
( @row:=@row + 1 )
BETWEEN
@pct AND ( @rows - @pct )
ORDER BY zahl ASC
Perfekt ;)
Danke!
MfG Naps