Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Найти зарплату по отделу ближайшую к средней

Найти зарплату по отделу ближайшую к средней
Я
   Vlaloplo
 
28.05.21 - 11:14
Всем привет. Есть прикладная задача в которой нужно получить среднюю ЗП по отделу и сотрудников, у которых зп ближе всего к средней

Получаю среднюю ЗП:
ВЫБРАТЬ
    СРЕДНЕЕ(Сотрудники.Зарплата) КАК Зарплата,
    Сотрудники.Отдел КАК Отдел
ПОМЕСТИТЬ ВТ_Средняя
ИЗ
    Справочник.Сотрудники КАК Сотрудники

СГРУППИРОВАТЬ ПО
    Сотрудники.Отдел
;
Но никак не могу понять, как получить сотрудников по близжайшему значению..
 
 Партнерская программа EFSOL Oblako
   Timon1405
 
1 - 28.05.21 - 11:18
Для каждого вычислить дельту со средним, взять минимум из дельт по абсолютному значению
выбор когда Зарплата-Средняя > 0 тогда Зарплата-Средняя иначе Средняя-Зарплата конец
   acht
 
2 - 28.05.21 - 11:18
Посчитать для сотрудника колонк модуля разности между средней зп и текущей зп. Выбрать тех, у кого она минимальна.
   Said_We
 
3 - 28.05.21 - 11:36
(0) Опять лабораторная работа?
   Vlaloplo
 
4 - 28.05.21 - 11:45
(3) Для себя изучаю) Хочется подтянуть тему запросов. Знакомый составляет задачи (Или может берет откуда, хз)
   СвинТуз
 
5 - 28.05.21 - 11:46
Задачи такого типа могут дать при приеме на работу.
Нужная тема ...
   acht
 
6 - 28.05.21 - 11:48
(5) Соверщенно верно. Работодателям нужна возможность наблюдать за тем, как раскрываются кандидаты, демонстрируя свой истинный уровень знаний.
   Документовед
 
7 - 28.05.21 - 11:49
(0) Как ты определяешь сотрудника отдела, если в течении месяца могут быть перемещения?
   Said_We
 
8 - 28.05.21 - 11:58
Засунул в подзапросы, что бы было понятнее.
Но на 1С такое не работает. Оконных функций нет.

Select *
from (Select
        t.*
        ,Min(t.raznost) over(partition by t.otdel) as MinimumRaznost
    from
        (Select
             t.otdel as otdel
            ,t.sotr as sotr
            ,t.summa as summa
            ,avg(t.summa) over(partition by t.otdel) as  srednee
            ,ABS(t.summa - avg(t.summa) over(partition by t.otdel)) as raznost
        from
            sotrudniki as t
        ) as t
    ) as t
where
    t.raznost = t.MinimumRaznost
   Said_We
 
9 - 28.05.21 - 11:59
(4) Не изучай запросы на 1С. Многое в мире запросов SQL пройдет мимо тебя.
   Said_We
 
10 - 28.05.21 - 12:01
К (8) Можно и короче по другому написать, но так в целях изучения понятнее.
   Dmitry77
 
11 - 28.05.21 - 12:15
Есть виртуальные таблицы
В первой получаешь реальные зп
Во второй среднюю
В третьей отклонение 
В четвёртой выводишь нужные отклонения.
   Said_We
 
12 - 28.05.21 - 12:37
(0) к (11) да в 1С, наверное, придется использовать JOIN между таблицами со средней ЗП и найти отклонение. Потом создать ещё одну таблицу с минимальным по модулю отклонением. Потом ещё раз JOIN, что бы отфильтровать их по минимальному отклонению.
Короче, туды-сюды постоянные :-).

Так как будет использоваться несколько раз JOIN, то время выполнения такого запроса будет на несколько порядков медленнее. Но в 1С по другому не бывает.
   Said_We
 
13 - 28.05.21 - 12:39
+ К (12) и текст запроса будет в 1С менее читабельный и по количеству строк длиннее.
Как-то так....
   Dmitry77
 
14 - 28.05.21 - 12:44
(11) выбрать...
Поместить втЗПСотрудников
Из...
;
Выбрать...

Из втЗПСотрудников.

В общем почитать про поместить в запросах.
   Said_We
 
15 - 28.05.21 - 12:50
+ К (14)
И не забыть почитать про конструкцию WITH:

WITH
vt_1 (...)
        AS
        (Select min(t.А) as MinA
    From t as t
        )

, vt_2 (...)
        AS
        (Select max(t.А) as MaxA
    From t as t
        )

select
         t1.MinA
        ,t2.MinA
From
         vt_1 as t1
        ,vt_2 as t2
   1Сергей
 
16 - 28.05.21 - 12:56
Найти больных с температурой близкой к средней по палате?
   Said_We
 
17 - 28.05.21 - 13:24
(16) Это учебная задача. Посмотри темы, которые создал (0), он учится в ВУЗе. Учебные задачи часто оторваны от жизни и от реальных задач. Но учебные задачи хорошо помогают изучить инструмент - собственно это и есть их основная цель.
Поэтому задача нормальная.
   Said_We
 
18 - 28.05.21 - 14:31
(0) Получилось или нет?
Интересно же.
   Vlaloplo
 
19 - 28.05.21 - 15:32
(18) Спасибо за советы) Удивился, как много людей ответило, ещё не пробовал
В первую очередь попробую (11), звучит логично) Может читал между строк, а при чем здесь sql запросы? Знаю, что похожи в целом, но вроде вопрос про запрос в 1с был)
   Said_We
 
20 - 28.05.21 - 16:27
(19) Когда напишешь запрос на 1С можешь его 1:1 перевести на SQL. А потом и сравнить скорость выполнения конструкции запроса в (8) и переведенного из 1С.
Потом нам всем расскажешь :-)
   Said_We
 
21 - 28.05.21 - 16:33
(19) Как создавать внутренние таблицы на SQL пример синтаксиса в (15).


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.