Задавайте вопросы, мы ответим
Вы не зашли.
Наверно как обычно, есть какое то элегантное решение, но ничего в голову не приходит, посоветуйте ))
есть набор чисел в столбце, допустим так
cnt numb
2 1
6 2
11 3
15 4
14 5
13 6
22 7
15 8
12 9
Надо получить AVG(cnt) но без крайних значений, т.е. без 2 и 22.
Спасибо заранее ))
upd. а если можно параметризовать, т.е. например по два значения исключать или три крайних - то вообще конечно ляпота )
Отредактированно Shopen (05.03.2012 12:37:57)
Неактивен
В голову приходит только через подзапросы. Т.е. найти id строк-ограничителей
и between.
Неактивен
а там нет ID - данная таблица это результат вот такого запроса:
Неактивен
HAVING WEEKOFYEAR(order_date) BETWEEN 3 AND сколькотамнедельвгоду - 3?
UPD: А, туплю, максимум не в этом месте. Но всё равно, WEEKOFYEAR тогда —
вполне себе нужная чиселка. Разве что прийдется завести временную табличку.
Неактивен
Хм... нет, мне же выбросить нужно не первые и последние N-недель, мне нужно выбросить максимальный и минимальный cnt (как при статистических расчетах - крайние значения выборки удаляются)
Неактивен
Если значения не повторяются, то так:
Неактивен
Все верно, это решается подзапросом.
Отредактированно evgeny (05.03.2012 19:14:50)
Неактивен
evgeny, не совсем так. Если максимальном значению соответствуют две строки, то не сработает. Нужно
а) посчитать сумму всех, не равных максимальному и минимальному
б) посчитать число записей, не равных максимальному и минимальному
Лучше всего двумя запросами
Неактивен
rgbeast написал:
evgeny, не совсем так. Если максимальном значению соответствуют две строки, то не сработает. Нужно
а) посчитать сумму всех, не равных максимальному и минимальному
б) посчитать число записей, не равных максимальному и минимальному
Лучше всего двумя запросамиSELECT min(cnt),max(cnt) FROM table INTO @min, @max;
SELECT AVG(cnt) FROM table WHERE cnt!=@min AND cnt!=@max;
Верно
Неактивен