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

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

СГРУППИРОВАТЬ ПО
    Сотрудники.Отдел
;
Но никак не могу понять, как получить сотрудников по близжайшему значению..
1 Timon1405
 
28.05.21
11:18
Для каждого вычислить дельту со средним, взять минимум из дельт по абсолютному значению
выбор когда Зарплата-Средняя > 0 тогда Зарплата-Средняя иначе Средняя-Зарплата конец
2 acht
 
28.05.21
11:18
Посчитать для сотрудника колонк модуля разности между средней зп и текущей зп. Выбрать тех, у кого она минимальна.
3 Said_We
 
28.05.21
11:36
(0) Опять лабораторная работа?
4 Vlaloplo
 
28.05.21
11:45
(3) Для себя изучаю) Хочется подтянуть тему запросов. Знакомый составляет задачи (Или может берет откуда, хз)
5 СвинТуз
 
28.05.21
11:46
Задачи такого типа могут дать при приеме на работу.
Нужная тема ...
6 acht
 
28.05.21
11:48
(5) Соверщенно верно. Работодателям нужна возможность наблюдать за тем, как раскрываются кандидаты, демонстрируя свой истинный уровень знаний.
7 Документовед
 
28.05.21
11:49
(0) Как ты определяешь сотрудника отдела, если в течении месяца могут быть перемещения?
8 Said_We
 
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
9 Said_We
 
28.05.21
11:59
(4) Не изучай запросы на 1С. Многое в мире запросов SQL пройдет мимо тебя.
10 Said_We
 
28.05.21
12:01
К (8) Можно и короче по другому написать, но так в целях изучения понятнее.
11 Dmitry77
 
28.05.21
12:15
Есть виртуальные таблицы
В первой получаешь реальные зп
Во второй среднюю
В третьей отклонение
В четвёртой выводишь нужные отклонения.
12 Said_We
 
28.05.21
12:37
(0) к (11) да в 1С, наверное, придется использовать JOIN между таблицами со средней ЗП и найти отклонение. Потом создать ещё одну таблицу с минимальным по модулю отклонением. Потом ещё раз JOIN, что бы отфильтровать их по минимальному отклонению.
Короче, туды-сюды постоянные :-).

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

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

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