2017-06-02 3 views
3

Ich habe eine Tabelle mit drei Spalten: list_num, sales_price und days_on_marketmySQL: Finding Durchschnitt nach oben und unten nten% der Daten zu entfernen

ich eine Abfrage ausgeführt werden soll, dass folgende Ausgabe eine einzige Nummer für den Durchschnitt Spalte 'days_on_market' mit den obersten 5% und den untersten 5% der Zeilen, die nach 'sales_price' entfernt wurden.

Ich habe ein Beispiel gefunden, von dem ich denke, dass es hier helfen würde, aber die Antwort ist zu kompliziert für mich, um es zu verstehen (ich habe erst letzte Woche mySQL gelernt). Siehe dieses Beispiel here.

Hier ist mein Code:

SELECT round(avg(days_on_market),0) as "90% Sell In" 
FROM sold_q3_2016 
WHERE list_num NOT IN (
    SELECT list_num FROM sold_q3_2016 ORDER BY sales_price LIMIT (count(list_num)*0.05) 
    ) OR list_num NOT IN (
    SELECT list_num FROM sold_q3_2016 ORDER BY sales_price desc LIMIT (count(list_num)*0.05) 
    ) 
; 

Jetzt kann ich nicht einmal diese laufen, wie ich die Syntaxfehler um die Zählfunktion innerhalb der LIMIT-Klausel erhalten, aber ich wollte es hier lassen meine Gedanken zeigen, verarbeiten. Irgendwelche Ideen?

Antwort

3

Haben Sie einen Versuch mit diesem:

SELECT AVG(days_on_market) 
FROM (
    SELECT 
    l.* 
    , @rownumber := @rownumber + 1 AS rownumber 
    FROM list_num l 
    , (SELECT @rownumber := 0) var_init_subquery 
    ORDER BY sales_price DESC 
) subquery_alias 
WHERE rownumber >= @rownumber * 0.05 
AND rownumber <= @rownumber * 0.95 
+0

Nizza, war ich auf einem anderen Ansatz arbeiten 'LIMIT' verwenden, aber das scheint nicht die Verwendung von akzeptieren Variablen ... was bedeutet, dass man in vorbereitete Anweisungen konvertiert (aufgrund eines offensichtlichen Fehlers siehe https://StackOverflow.com/Questions/245180/Variable-Limit-Clause-in-Mysql). –

Verwandte Themen