powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Среднее значения без учета макс и мин!
51 сообщений из 51, показаны все 3 страниц
Среднее значения без учета макс и мин!
    #39763972
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую, Товарищи

Задание. Найти среднее значение всех зарплат, без учета их максимального и минимального значения.

Сделал так. через MIN() MAX() OVER

SELECT AVG(sal)
FROM (SELECT sal, MIN(sal) OVER() min_sal, MAX(sal) OVER() max_sal
FROM emp) x
WHERE sal NOT IN (min_sal, max_sal)
GO


все работает. среднее значение зп выдает верное.
Решил сделать другим способом, посредством функции ROW_NUMBER.

SELECT AVG(SAL) avg_sal
FROM(SELECT sal, ROW_NUMBER() OVER(ORDER BY sal) rn
FROM emp) x
WHERE rn NOT IN ((SELECT MAX(rn) FROM emp),
(SELECT MIN(rn) FROM emp))

GO

ПО идее я выбираю все начения кроме макс и мин зарплаты. однако запрсо не работает.
подскажите на что обратить внимание, как переделать.
Ошибка в том. что в предикате WHERE нельзя использовать агрегатные функции, поидее можно сделать с HAVING.
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39763974
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

Может вам медиана нужна?
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39763977
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermama,

В итоге я отчаялся и сделал

SELECT AVG(SAL) avg_sal
FROM(SELECT sal, ROW_NUMBER() OVER(ORDER BY sal) rn
FROM emp) x
WHERE rn BETWEEN 2 AND 13
GO

и все работает верно, однако для этого запроса мне нужно посмотреть выборкой какой номер у максимального ранга. то есть потеря времени
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39763979
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

нет, именно среднюю зп без учета максимальной зп во всей таблице и минимальной
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39763981
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaTaPaK,

нет, именно среднюю зп без учета максимальной зп во всей таблице и минимальной
бредовая сущность, 50 000 уйдёт, а 49999 учитываем
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39763995
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача глупая, но у нее есть такое же глупое решение.
Среднее — это сумма значений, деленная на количество значений.
Нужный результат — это (сумма значений - min - max) деленная на (количество значений - 2).
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764003
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Задача глупая, но у нее есть такое же глупое решение.
Среднее — это сумма значений, деленная на количество значений.
Нужный результат — это (сумма значений - min - max) деленная на (количество значений - 2).

Нет, т.к. записей с максимальным и минимальным значением может быть больше чем по одной.
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764006
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamadermama,

В итоге я отчаялся и сделал

SELECT AVG(SAL) avg_sal
FROM(SELECT sal, ROW_NUMBER() OVER(ORDER BY sal) rn
FROM emp) x
WHERE rn BETWEEN 2 AND 13
GO

и все работает верно, однако для этого запроса мне нужно посмотреть выборкой какой номер у максимального ранга. то есть потеря времениТак сделайте 2 ROW_NUMBER:
Код: sql
1.
2.
3.
4.
SELECT AVG(SAL) avg_sal
FROM(SELECT sal, ROW_NUMBER() OVER(ORDER BY sal) rn, ROW_NUMBER() OVER(ORDER BY sal desc) rm
     FROM emp) x
WHERE rn > 1 AND rm > 1 



TaPaKбредовая сущность, 50 000 уйдёт, а 49999 учитываемВ принципе это широко используемое в статистической науке удаление верхних и нижних выбросов, хотя делают это обычно в более общем виде, а не "удаляя одно значение".
И используется такое редко, всё таки медианное значение для подобных целей подходит лучше.
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764007
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,

В моем случае не так, однако логика вернаю

sal
800
950
1100
1250
1250
1300
1500
1600
2450
2850
2975
3000
3000
5000
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764010
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

нормально, я бы сам не додумался до такого решения(
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764012
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaНайти среднее значение всех зарплат, без учета их максимального и минимального значения.
Код: sql
1.
SELECT (SUM(salary)-MIN(salary)-MAX(salary))/(COUNT(salary)-2)


dermamaвсе работает. среднее значение зп выдает верное.
Насколько верно получаемое значение, если 2 или более записей имеют равное макс. или мин. значение?
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764014
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Топ топ в подзапросах
Правда совершенно непонятно, вам надо исключить все максимальные-минимальные значения или только по одноой записи?

Селект среднее
Из
Если оно не равно (максимальное из/ топ 1 ордер desc) и не равно (минимальное из/ топ 1 ордер asc)
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764016
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

и как с дублями будет жить?

Код: sql
1.
2.
3.
4.
5.
6.
; WITH t as (SELECT MIN(a) as Vmin,MAX(a) as  VMax FROM @a)
SELECT 	
	AVG(a)
FROM @a
CROSS JOIN t
WHERE a > vMin AND a < VMax
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764021
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinadermamaНайти среднее значение всех зарплат, без учета их максимального и минимального значения.
Код: sql
1.
SELECT (SUM(salary)-MIN(salary)-MAX(salary))/(COUNT(salary)-2)


dermamaвсе работает. среднее значение зп выдает верное.
Насколько верно получаемое значение, если 2 или более записей имеют равное макс. или мин. значение?
дак функция ROW_number дает уникальные значения для каждой зарплаты, не важно, сколько одинаковых значений зараплат у меня в итоговом множестве
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764023
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKalexeyvg,

и как с дублями будет жить?

Код: sql
1.
2.
3.
4.
5.
6.
; WITH t as (SELECT MIN(a) as Vmin,MAX(a) as  VMax FROM @a)
SELECT 	
	AVG(a)
FROM @a
CROSS JOIN t
WHERE a > vMin AND a < VMax

Я показал, как модифицировать запрос ТС, логика которого ТС подходит.
А то, что его запрос противоречит его же постановке задачи, это уже другое дело :-)

Для сформулированной задачи, конечено, правильным будет ваш вариант.
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764024
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermamaAkinaпропущено...
Код: sql
1.
SELECT (SUM(salary)-MIN(salary)-MAX(salary))/(COUNT(salary)-2)


пропущено...

Насколько верно получаемое значение, если 2 или более записей имеют равное макс. или мин. значение?
дак функция ROW_number дает уникальные значения для каждой зарплаты, не важно, сколько одинаковых значений зараплат у меня в итоговом множестве

Тьфу, не туда смотрел, всеравно MAX, MIN () OVER() просто находит мне макс и мин результаты по всему множеству, и уже тоже без разницы, сколько там одинаковых значений, ну как я понимаю
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764026
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermamadermamaпропущено...

дак функция ROW_number дает уникальные значения для каждой зарплаты, не важно, сколько одинаковых значений зараплат у меня в итоговом множестве

Тьфу, не туда смотрел, всеравно MAX, MIN () OVER() просто находит мне макс и мин результаты по всему множеству, и уже тоже без разницы, сколько там одинаковых значений, ну как я понимаю

хотяяя, необходимо проверить, так сразу не смогу сказать, я изучаю
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764028
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaAkinaпропущено...
Код: sql
1.
SELECT (SUM(salary)-MIN(salary)-MAX(salary))/(COUNT(salary)-2)



пропущено...

Насколько верно получаемое значение, если 2 или более записей имеют равное макс. или мин. значение?
дак функция ROW_number дает уникальные значения для каждой зарплаты, не важно, сколько одинаковых значений зараплат у меня в итоговом множествефункция ROW_number просто нумерует записи

Вот если есть зарплаты

100
100
90
80
70
60

То запрос с ROW_number уберёт только верхнюю и нажнюю строчки, и среднее будет считаться по
100
90
80
70

А нужно, наверное, так?
90
80
70
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764035
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvgdermamaпропущено...

дак функция ROW_number дает уникальные значения для каждой зарплаты, не важно, сколько одинаковых значений зараплат у меня в итоговом множествефункция ROW_number просто нумерует записи

Вот если есть зарплаты

100
100
90
80
70
60

То запрос с ROW_number уберёт только верхнюю и нажнюю строчки, и среднее будет считаться по
100
90
80
70

А нужно, наверное, так?
90
80
70

Проверил свой запрос с MIN MAX () OVER счиатем верно, находит среднеее значение 240 на 3 = 80
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764039
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermamaalexeyvgпропущено...
функция ROW_number просто нумерует записи

Вот если есть зарплаты

100
100
90
80
70
60

То запрос с ROW_number уберёт только верхнюю и нажнюю строчки, и среднее будет считаться по
100
90
80
70

А нужно, наверное, так?
90
80
70

Проверил свой запрос с MIN MAX () OVER счиатем верно, находит среднеее значение 240 на 3 = 80

с ROW_NUMBER не првоерял, но по идее, да, по моей логике он только верхнее и нижнее значение откинет, а такоеже значение с самой большой зарплатой он оставит и я получу не верное значение..
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764043
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaпо идее, да, по моей логике он только верхнее и нижнее значение откинет, а такоеже значение с самой большой зарплатой он оставит и я получу не верное значение..Тогда используйте вариант:
TaPaK
Код: sql
1.
2.
3.
4.
5.
6.
; WITH t as (SELECT MIN(a) as Vmin,MAX(a) as  VMax FROM @a)
SELECT 	
	AVG(a)
FROM @a
CROSS JOIN t
WHERE a > vMin AND a < VMax
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764048
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgВот если есть зарплаты

100
100
90
80
70
60

То запрос с ROW_number уберёт только верхнюю и нажнюю строчки, и среднее будет считаться по
100
90
80
70

А нужно, наверное, так?
90
80
70

если нужно последнее, то меняем Row_Number() на rank() (или dense_rank())
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764054
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

посмотрите это (прямо по теме - часть 1):

YouTube Video
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764096
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,

всем большое спасибо, проблема с одинаковыми макс или мин значениемя поможет решить RANK так как он одинаковым значениям присвоит одинаковый ранг, чего не делает ROW_number, видео посмотрю после работы.

Однако, у меня остался вопрос, как все таки решить именно МОЙ пример через ROW_NUMBER и с обязательным условием WHERE

SELECT AVG(SAL) avg_sal
FROM(SELECT sal, ROW_NUMBER() OVER(ORDER BY sal) rn
FROM emp) x
WHERE rn NOT IN ((SELECT MAX(rn) FROM emp),
(SELECT MIN(rn) FROM emp))

GO
ТО есть как сделать с NOT IN
тоесть как изменить WHERE при этом во вложенном запросе не использовать еще один ROW_NUMBER , я имею ввиду следующий запрос

SELECT AVG(SAL) avg_sal
FROM(SELECT sal, ROW_NUMBER() OVER(ORDER BY sal) rn, ROW_NUMBER() OVER(ORDER BY sal desc) rm
FROM emp) x
WHERE rn > 1 AND rm > 1
GO
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764098
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaс ROW_NUMBER не првоерял, но по идее, да, по моей логике он только верхнее и нижнее значение откинет, а такоеже значение с самой большой зарплатой он оставит и я получу не верное значение..
Скажите, какой ответ должен быть для таких данных:

100
100
90
85
85
70

Варианты ответов:

91.67
90
86.67
87.5
другое значение
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764102
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinadermamaс ROW_NUMBER не првоерял, но по идее, да, по моей логике он только верхнее и нижнее значение откинет, а такоеже значение с самой большой зарплатой он оставит и я получу не верное значение..
Скажите, какой ответ должен быть для таких данных:

100
100
90
85
85
70

Варианты ответов:

91.67
90
86.67
87.5
другое значение

ответ (90+85+85)/3 = 86.6666667
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764103
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermamaAkinaпропущено...

Скажите, какой ответ должен быть для таких данных:

100
100
90
85
85
70

Варианты ответов:

91.67
90
86.67
87.5
другое значение

ответ (90+85+85)/3 = 86.6666667

ну если иметь ввиду, что я самое большое и самое мальенькое значение не учитываю
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764104
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermamaAkinaпропущено...

Скажите, какой ответ должен быть для таких данных:

100
100
90
85
85
70

Варианты ответов:

91.67
90
86.67
87.5
другое значение

ответ (90+85+85)/3 = 86.6666667

а если бы учитывалось еще и одно из двух значений 100, то 90
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764112
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKalexeyvg,

и как с дублями будет жить?

Код: sql
1.
2.
3.
4.
5.
6.
; WITH t as (SELECT MIN(a) as Vmin,MAX(a) as  VMax FROM @a)
SELECT 	
	AVG(a)
FROM @a
CROSS JOIN t
WHERE a > vMin AND a < VMax



а по какой причине было принято решение использовать рекурсивный оператор WITH, в каких случаях его нужно использовать?
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764115
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaTaPaKalexeyvg,

и как с дублями будет жить?

Код: sql
1.
2.
3.
4.
5.
6.
; WITH t as (SELECT MIN(a) as Vmin,MAX(a) as  VMax FROM @a)
SELECT 	
	AVG(a)
FROM @a
CROSS JOIN t
WHERE a > vMin AND a < VMax



а по какой причине было принято решение использовать рекурсивный оператор WITH, в каких случаях его нужно использовать?
рекурсивный оператор.... запишу
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764118
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKdermamaпропущено...


а по какой причине было принято решение использовать рекурсивный оператор WITH, в каких случаях его нужно использовать?
рекурсивный оператор.... запишу

обобщенное табличное выражение.
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764126
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

Код: sql
1.
2.
3.
4.
SELECT AVG(SAL) avg_sal
FROM(SELECT sal, ROW_NUMBER() OVER(ORDER BY sal) rn, count(*) over () as max_rn
 FROM emp) x
WHERE rn NOT IN (max_rn,1)
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764127
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopellydermama,

Код: sql
1.
2.
3.
4.
SELECT AVG(SAL) avg_sal
FROM(SELECT sal, ROW_NUMBER() OVER(ORDER BY sal) rn, count(*) over () as max_rn
 FROM emp) x
WHERE rn NOT IN (max_rn,1)



блин, это гениально, спасибо.
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764128
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kopellydermama,
Код: sql
1.
2.
3.
4.
SELECT AVG(SAL) avg_sal
FROM(SELECT sal, ROW_NUMBER() OVER(ORDER BY sal) rn, count(*) over () as max_rn
 FROM emp) x
WHERE rn NOT IN (max_rn,1)


тоже мимо, следующий :)

используйте когда хотите, не нравиться перенесите в CROSS
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764132
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKKopellydermama,
Код: sql
1.
2.
3.
4.
SELECT AVG(SAL) avg_sal
FROM(SELECT sal, ROW_NUMBER() OVER(ORDER BY sal) rn, count(*) over () as max_rn
 FROM emp) x
WHERE rn NOT IN (max_rn,1)


тоже мимо, следующий :)

используйте когда хотите, не нравиться перенесите в CROSS

почему мимо? просто ROW_NUMBER на RANK заменить,

Тапак, подскажи пожалуйста, для чего необходим Cross join?
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764133
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermamaTaPaKпропущено...

тоже мимо, следующий :)

используйте когда хотите, не нравиться перенесите в CROSS

почему мимо? просто ROW_NUMBER на RANK заменить,

Тапак, подскажи пожалуйста, для чего необходим Cross join?

в рамках данной задачи конечно
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764135
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaTaPaKпропущено...

тоже мимо, следующий :)

используйте когда хотите, не нравиться перенесите в CROSS

почему мимо? просто ROW_NUMBER на RANK заменить,

Тапак, подскажи пожалуйста, для чего необходим Cross join?
это точно также исключает только одно максимальное и минимальное значение
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764136
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaпочему мимо? просто ROW_NUMBER на RANK заменить,
нельзя
т.к.

count(*) = max(row_numver), но != max(rank)
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764144
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKdermamaпропущено...


почему мимо? просто ROW_NUMBER на RANK заменить,

Тапак, подскажи пожалуйста, для чего необходим Cross join?
это точно также исключает только одно максимальное и минимальное значение

SELECT sal, ROW_NUMBER() OVER(ORDER BY sal) rn
FROM asd

sal rn
60 1
70 2
80 3
90 4
100 5
100 6

SELECT sal, RANK() OVER(ORDER BY sal desc) rn
FROM asd

sal rn
100 1
100 1
90 3
80 4
70 5
60 6

если выбрать .....попробовал сделать такого плана запрос
SELECT sal, MAX(rn) dd
FROM (SELECT sal, RANK() OVER(ORDER BY sal desc) rn from asd) x
GROUP BY sal

я в итоге всеравно получаю 100 в итоговом множестве....я совсем запутался, правда.
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764147
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermamaTaPaKпропущено...

это точно также исключает только одно максимальное и минимальное значение

SELECT sal, ROW_NUMBER() OVER(ORDER BY sal) rn
FROM asd

sal rn
60 1
70 2
80 3
90 4
100 5
100 6

SELECT sal, RANK() OVER(ORDER BY sal desc) rn
FROM asd

sal rn
100 1
100 1
90 3
80 4
70 5
60 6

если выбрать .....попробовал сделать такого плана запрос
SELECT sal, MAX(rn) dd
FROM (SELECT sal, RANK() OVER(ORDER BY sal desc) rn from asd) x
GROUP BY sal

я в итоге всеравно получаю 100 в итоговом множестве....я совсем запутался, правда.''

Пожалуйста, не читайте мое сообщение., я сам понял, что написал бред, запрос делает все верно, я реализовал не то, что хотел...
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764156
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaответ (90+85+85)/3 = 86.6666667Ага... то есть отбросить не максимальную (минимальную) зарплату, а все зарплаты с максимальным (минимальным) значением.
Иными словами, для макс/мин значений дубликаты "схлопывать", тогда как для оставшихся значений - нет.
dermamaа если бы учитывалось еще и одно из двух значений 100, то 90
Знаете, у Вас как постановщика есть вполне конкретная задача - и от Вас не должно по идее поступать никаких "если бы", "может быть" и т.п. Это мы можем (и, к сожалению, нам приходится) гадать...
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764163
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinadermamaответ (90+85+85)/3 = 86.6666667Ага... то есть отбросить не максимальную (минимальную) зарплату, а все зарплаты с максимальным (минимальным) значением.
Иными словами, для макс/мин значений дубликаты "схлопывать", тогда как для оставшихся значений - нет.
dermamaа если бы учитывалось еще и одно из двух значений 100, то 90
Знаете, у Вас как постановщика есть вполне конкретная задача - и от Вас не должно по идее поступать никаких "если бы", "может быть" и т.п. Это мы можем (и, к сожалению, нам приходится) гадать...

В таком случае мы зря затеяли котовасию с дубликатами? и если в таблице есть много одинаковых значений, при этом все они максимальные, то следовать необходимо условию задачи и игнорировать дубликаты, так как они не максимальные уже значения, а лишь дублирующие друг друга, хотя понятие максимальное , если пользоваться функция ранжирования, они как раз таки и получают за счет присвоения ранга... поэтому дубликаты стоит игнорировать)))
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764167
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermamaAkinaпропущено...
Ага... то есть отбросить не максимальную (минимальную) зарплату, а все зарплаты с максимальным (минимальным) значением.
Иными словами, для макс/мин значений дубликаты "схлопывать", тогда как для оставшихся значений - нет.
пропущено...

Знаете, у Вас как постановщика есть вполне конкретная задача - и от Вас не должно по идее поступать никаких "если бы", "может быть" и т.п. Это мы можем (и, к сожалению, нам приходится) гадать...

В таком случае мы зря затеяли котовасию с дубликатами? и если в таблице есть много одинаковых значений, при этом все они максимальные, то следовать необходимо условию задачи и игнорировать дубликаты, так как они не максимальные уже значения, а лишь дублирующие друг друга, хотя понятие максимальное , если пользоваться функция ранжирования, они как раз таки и получают за счет присвоения ранга... поэтому дубликаты стоит игнорировать)))

либо избегать использования ранжирующих функций.....
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764176
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите Даше определится с ТЗ (с)
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764188
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaобобщенное табличное выражение.Просто такая форма записи. Можно то же самое записать подзапросом.
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764193
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvgdermamaобобщенное табличное выражение.Просто такая форма записи. Можно то же самое записать подзапросом.

понятно, спасибо.
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764254
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermamaПриветствую, Товарищи

Задание. Найти среднее значение всех зарплат, без учета их максимального и минимального значения.

Сделал так. через MIN() MAX() OVER

SELECT AVG(sal)
FROM (SELECT sal, MIN(sal) OVER() min_sal, MAX(sal) OVER() max_sal
FROM emp) x
WHERE sal NOT IN (min_sal, max_sal)
GO


все работает. среднее значение зп выдает верное.
Решил сделать другим способом, посредством функции ROW_NUMBER.

SELECT AVG(SAL) avg_sal
FROM(SELECT sal, ROW_NUMBER() OVER(ORDER BY sal) rn
FROM emp) x
WHERE rn NOT IN ((SELECT MAX(rn) FROM emp),
(SELECT MIN(rn) FROM emp))

GO

ПО идее я выбираю все начения кроме макс и мин зарплаты. однако запрсо не работает.
подскажите на что обратить внимание, как переделать.
Ошибка в том. что в предикате WHERE нельзя использовать агрегатные функции, поидее можно сделать с HAVING.


Так у Вас считается макс и мин от всех сотрудников. А нужно для каждого сотрудника отдельно их отсечь, а уж из остатка считать..
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764255
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg_SQLТак у Вас считается макс и мин от всех сотрудников. А нужно для каждого сотрудника отдельно их отсечь, а уж из остатка считать..
Новый виток... высечь сотрудников
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764345
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

А не проще ли сделать самое простое?

(SUM() - MIN() - MAX())/(COUNT() - 2)

Про проверку на деление на 0 не забыть
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764348
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinadermamaНайти среднее значение всех зарплат, без учета их максимального и минимального значения.
Код: sql
1.
SELECT (SUM(salary)-MIN(salary)-MAX(salary))/(COUNT(salary)-2)


dermamaвсе работает. среднее значение зп выдает верное.
Насколько верно получаемое значение, если 2 или более записей имеют равное макс. или мин. значение?


SELECT (SUM(salary)-MIN(salary)-MAX(salary))/(NULLIF(COUNT(salary), 2)-2)
...
Рейтинг: 0 / 0
Среднее значения без учета макс и мин!
    #39764399
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninА не проще ли сделать самое простое?a_voroninSELECT (SUM(salary)-MIN(salary)-MAX(salary))/(NULLIF(COUNT(salary), 2)-2)Еще один


Помедитируйте над результатом:
Код: sql
1.
2.
3.
4.
select
 (sum(salary)-min(salary)-max(salary))/(nullif(count(salary), 2)-2)
from
 (values (1), (1), (2.5), (2.5), (3), (3)) t(salary);
...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Среднее значения без учета макс и мин!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]