Sie suchen nach GROUP BY
. Um den Durchschnittspreis für jede Position und nicht nur für eine Position zu erhalten, gehen Sie wie folgt vor.
SELECT position, AVG(price) average
FROM products
GROUP BY position
Sie haben einen Zwei-Sigma-Ausschluss in Ihrer Abfrage. Sie müssen die gleiche Technik verwenden, um das Limit für jede Position zu erhalten. Wenn Sie den Mittelwert + 2 Sigma-Grenzwert für jede Position berechnen möchten, benötigen Sie diese Unterabfrage. (Hinweis: Es ist am besten eher Klammern in Sprachen wie SQL zu verwenden, als arithmetischen Operator Vorrang zu vertrauen.)
SELECT position,
AVG(price) + (2.0 * STDDEV(price)) upper_limit
FROM products
GROUP BY position
Sie dann diese Abfrage auf Ihr Top-Level kommen können wie wählen so
SELECT a.position, a.price
FROM products
JOIN (
SELECT position,
AVG(price) + (2.0 * STDDEV(price)) upper_limit
FROM products
GROUP BY position
) b ON a.position = b.position
AND a.price < b.upper_limit
Das gibt Ihnen die Rohdaten für Position/Preis ohne Ihre Ausreißer. Sehen Sie, wie die -Klausel den Zeilen in der Haupt- und Unterabfrage nach Position entspricht, und filtert dann die Zeilen heraus, in denen der Rohpreis über der upper_limit
liegt? Das ist der Trick.
Dann können Sie diese Daten mit einem typischen GROUP BY
aggregieren.
SELECT a.position, AVG(a.price) average
FROM products
JOIN (
SELECT position,
AVG(price) + (2.0 * STDDEV(price)) upper_limit
FROM products
GROUP BY position
) b ON a.position = b.position
AND a.price < b.upper_limit
GROUP BY a.position
Diese Schichtung von Unterabfragen innerhalb von Abfragen ist, warum es strukturierte Abfragesprache genannt wird.
Siehe http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple- sql-query – Strawberry
Warum die -1 Bewertung? – Louisa
Bewegen Sie den Mauszeiger über den Abwärtspfeil. – Strawberry