Вы ищете GROUP BY
. Чтобы получить среднюю цену за каждую позицию, а не только за одну позицию, вот что вы делаете.
SELECT position, AVG(price) average
FROM products
GROUP BY position
У вас есть исключение из двух сигм в вашем запросе. Вы должны использовать ту же технику, чтобы получить предел для каждой позиции. Если вы хотите вычислить средний + 2 лимит сигмы для каждой позиции, вам нужен этот подзапрос. (Примечание: Лучше всего использовать круглые скобки в языках программирования, как SQL, а не доверяя арифметический оператор приоритет.)
SELECT position,
AVG(price) + (2.0 * STDDEV(price)) upper_limit
FROM products
GROUP BY position
Вы можете присоединиться к этому запрос к папке верхнего уровня выбрать как так
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
Это дает вам необработанные данные для позиции/цены, исключая ваши выбросы. Вы видите, как предложение ON
соответствует строкам в основном и подзапросе по положению, а затем отфильтровывает строки, где исходная цена выше upper_limit
? Это трюк.
Затем вы можете объединить эти данные с типичным GROUP BY
.
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
Это наслоение подзапросов внутри запросов почему это называется язык структурированных запросов.
См. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry
Почему рейтинг -1? – Louisa
Наведите указатель на стрелку вниз – Strawberry