powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Среднее значения без учета макс и мин!
25 сообщений из 51, страница 2 из 3
Среднее значения без учета макс и мин!
    #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
25 сообщений из 51, страница 2 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Среднее значения без учета макс и мин!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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