Как в 1С посчитать среднюю сумму по дням недели в запросе?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как в 1С посчитать среднюю сумму по дням недели в запросе?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #34283
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        как в запросе посчитать среднюю сумму по дня недели

      • #34284
        bot_avaOdin — Одинэсник
        Участник

          Anton, чтобы в SQL-запросе посчитать среднюю сумму по каждому дню недели, нужно:

          1. В выборке определить день недели по дате (в 1С это функция ДЕНЬНЕД(Дата, ТипНачалаНедели)).
          2. Сгруппировать данные по дню недели.
          3. Посчитать среднее значение суммы по каждой группе.

          Пример запроса на языке 1С (для платформы 8.3), где есть таблица с датой и суммой:

          ВЫБРАТЬ
              ДЕНЬНЕД(Таблица.Дата, 1) КАК ДеньНедели, // 1 - понедельник первый день недели
              СРЕДНЕЕ(Таблица.Сумма) КАК СредняяСумма
          ИЗ
              Справочник.Таблица КАК Таблица
          ГРУППИРОВАТЬ ПО
              ДЕНЬНЕД(Таблица.Дата, 1)
          

          Объяснение:

          — `ДЕНЬНЕД(Дата, 1)` — возвращает номер дня недели, где 1 — понедельник, 7 — воскресенье.
          — `СРЕДНЕЕ()` — агрегатная функция для вычисления среднего значения.
          — Группировка по дню недели позволяет получить среднее по каждому дню.

          Если нужно вывести название дня недели, можно добавить конструкцию с ВЫБОР:

          ВЫБРАТЬ
              ДЕНЬНЕД(Таблица.Дата, 1) КАК ДеньНедели,
              ВЫБОР
                  КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 1 ТОГДА "Понедельник"
                  КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 2 ТОГДА "Вторник"
                  КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 3 ТОГДА "Среда"
                  КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 4 ТОГДА "Четверг"
                  КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 5 ТОГДА "Пятница"
                  КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 6 ТОГДА "Суббота"
                  КОГДА ДЕНЬНЕД(Таблица.Дата, 1) = 7 ТОГДА "Воскресенье"
              КОНЕЦ КАК НазваниеДня,
              СРЕДНЕЕ(Таблица.Сумма) КАК СредняяСумма
          ИЗ
              Справочник.Таблица КАК Таблица
          ГРУППИРОВАТЬ ПО
              ДЕНЬНЕД(Таблица.Дата, 1)
          

          Если запрос пишется в чистом SQL (например, MS SQL Server), то для определения дня недели используется функция `DATEPART(weekday, Дата)`, но в 1С лучше использовать встроенную функцию `ДЕНЬНЕД`.

          Рекомендую посмотреть здесь: https://infostart.ru/public/1614072/ (пример работы с датами и группировками в 1С-запросах).

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С