Меры центральной тенденции (вычисление среднего) в запросе 1С

31.08.20

Разработка - Запросы

Меры центральной тенденции (вычисление среднего) в запросе 1С: * Среднее арифметическое * Среднее гармоническое * Среднее квадратическое * Среднее усеченное * Среднее винсоризованное * Медиана * Мода

При написании статьи использовались ссылки:

Как правильно вычислить среднее значение?

Меры центральной тенденции

Квадратный корень в запросе 1С

Как правильно вычислить среднее значение?

Средняя зарплата… Средняя продолжительность жизни… Практически каждый день мы с вами слышим эти словосочетания, используемые для описания множества одним единственным числом. Но как ни странно, «среднее значение» — достаточно коварное понятие, часто вводящее в заблуждение обычного, неискушенного в математической статистике, человека.

В чем проблема?

Под средним значением чаще всего подразумевается среднее арифметическое, которое очень сильно варьируется под воздействием единичных фактов или событий. И вы не получите реального представления о том, как именно распределены значения, которые вы изучаете.

Давайте обратимся к классическому примеру со средней зарплатой.

В какой-то абстрактной компании работает десять сотрудников. Девять из них получают зарплату около 50 000 рублей, а один 1 500 000 рублей (по странному совпадению он же является генеральным директором этой компании).

Выборка зарплат

Средним значением в данном случае будет 195 150 рублей, что согласитесь, неправильно.

Какие способы вычисления среднего бывают?

  • Среднее арифметическое
  • Среднее гармоническое
  • Среднее квадратическое
  • Среднее усеченное
  • Среднее винсоризованное
  • Медиана
  • Мода

Перечисленные способы вычисления возможно реализовать на языке запросов 1С. Описание перечисленных и прочих способов вычисления среднего можно найти по ссылке Меры центральной тенденции.

И вот какие значения у нас получились:

Пример текста запроса

Текст запроса для вычисления различных вариантов среднего с числовыми данными из текста статьи (КлючеваяОперация: "Операция10"), его можно вставить в консоль запросов и выполнить:

  • временная таблица втЗамерыВремени - исходный массив числовых данных;
  • временная таблица втКлючевыеОперацииСтатистика - результат различных рассчетов среднего;
  • временные таблицы втЗамерыВремениПоВозрастанию и втКлючевыеОперацииАгрегаты - базовые данные для всех вариантов вычисления среднего;
  • временные таблицы в тексте запроса составлены так что бы различные варианты вычисления среднего были разделены и можно было понять и отделить нужный вариант;
  • вариант Среднее арифметическое результат аналогичен функции СРЕДНЕЕ();
  • вариант Среднее гармоническое вычисляется практически так же просто как и Среднее арифметическое;
  • вариант Среднее квадратическое использует вычисление из статьи Квадратный корень в запросе 1С;
  • варианты Среднее усеченное, Среднее винсоризованное и Медиана используют упорядоченный входной набор данных - временная таблица втЗамерыВремениПоВозрастанию, который имеет ограничение на количество строк втЗамерыВремени, для всех остальных вариантов можно обойтись временной таблицей втЗамерыВремени без ограничения количества строк;
  • вариант Мода может обработать входной набор данных отличный от числового;
  • варианты Среднее усеченное, Среднее винсоризованное позволяют получить усредненные значения минимума и максимума входного набора данных.
ВЫБРАТЬ
	"Операция10" КАК КлючеваяОперация,
	48000 КАК ВремяВыполнения
ПОМЕСТИТЬ втЗамерыВремени

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция10",
	49000

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция10",
	49500

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция10",
	50000

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция10",
	50000

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция10",
	50500

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция10",
	51000

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция10",
	51500

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция10",
	52000

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция10",
	1500000

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция5",
	98

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция5",
	99

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция5",
	100

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция5",
	101

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция5",
	102

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Операция1",
	50
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1000000000
	АВТОНОМЕРЗАПИСИ() КАК НомерСтроки,
	втЗамерыВремени.КлючеваяОперация КАК КлючеваяОперация,
	втЗамерыВремени.ВремяВыполнения КАК ВремяВыполнения
ПОМЕСТИТЬ втЗамерыВремениПоВозрастанию
ИЗ
	втЗамерыВремени КАК втЗамерыВремени

УПОРЯДОЧИТЬ ПО
	втЗамерыВремени.КлючеваяОперация,
	втЗамерыВремени.ВремяВыполнения
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втЗамерыВремениПоВозрастанию.КлючеваяОперация КАК КлючеваяОперация,
	КОЛИЧЕСТВО(втЗамерыВремениПоВозрастанию.ВремяВыполнения) КАК КоличествоЗамеров,
	МИНИМУМ(втЗамерыВремениПоВозрастанию.ВремяВыполнения) КАК ВремяВыполненияМинимум,
	МАКСИМУМ(втЗамерыВремениПоВозрастанию.ВремяВыполнения) КАК ВремяВыполненияМаксимум,
	ВЫРАЗИТЬ(СРЕДНЕЕ(втЗамерыВремениПоВозрастанию.ВремяВыполнения) КАК ЧИСЛО(15, 3)) КАК ВремяВыполненияСреднее,
	СУММА(втЗамерыВремениПоВозрастанию.ВремяВыполнения) КАК ВремяВыполненияСумма,
	СУММА(1 / втЗамерыВремениПоВозрастанию.ВремяВыполнения) КАК ВремяВыполненияСуммаОбратная,
	СУММА(втЗамерыВремениПоВозрастанию.ВремяВыполнения * втЗамерыВремениПоВозрастанию.ВремяВыполнения) КАК ВремяВыполненияСуммаКвадратическая,
	МИНИМУМ(втЗамерыВремениПоВозрастанию.НомерСтроки) КАК НомерСтрокиМинимум,
	МАКСИМУМ(втЗамерыВремениПоВозрастанию.НомерСтроки) КАК НомерСтрокиМаксимум,
	(МАКСИМУМ(втЗамерыВремениПоВозрастанию.НомерСтроки) - МИНИМУМ(втЗамерыВремениПоВозрастанию.НомерСтроки)) / 2 КАК НомерСтрокиСередина,
	ВЫРАЗИТЬ((МАКСИМУМ(втЗамерыВремениПоВозрастанию.НомерСтроки) - МИНИМУМ(втЗамерыВремениПоВозрастанию.НомерСтроки)) / 2 КАК ЧИСЛО(10, 0)) КАК НомерСтрокиСерединаЦелое,
	ВЫРАЗИТЬ(КОЛИЧЕСТВО(втЗамерыВремениПоВозрастанию.ВремяВыполнения) / 100 * 10 КАК ЧИСЛО(10, 0)) КАК КоличествоУсечения
ПОМЕСТИТЬ втКлючевыеОперацииАгрегаты
ИЗ
	втЗамерыВремениПоВозрастанию КАК втЗамерыВремениПоВозрастанию

СГРУППИРОВАТЬ ПО
	втЗамерыВремениПоВозрастанию.КлючеваяОперация
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втКлючевыеОперацииАгрегаты.КлючеваяОперация КАК КлючеваяОперация,
	ВЫРАЗИТЬ(втКлючевыеОперацииАгрегаты.ВремяВыполненияСумма / втКлючевыеОперацииАгрегаты.КоличествоЗамеров КАК ЧИСЛО(15, 3)) КАК ВремяВыполненияСреднееАрифметическое,
	втКлючевыеОперацииАгрегаты.ВремяВыполненияСумма КАК ВремяВыполненияСумма,
	втКлючевыеОперацииАгрегаты.КоличествоЗамеров КАК КоличествоЗамеров
ПОМЕСТИТЬ втКлючевыеОперацииСреднееАрифметическое
ИЗ
	втКлючевыеОперацииАгрегаты КАК втКлючевыеОперацииАгрегаты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втКлючевыеОперацииАгрегаты.КлючеваяОперация КАК КлючеваяОперация,
	ВЫРАЗИТЬ(втКлючевыеОперацииАгрегаты.КоличествоЗамеров / втКлючевыеОперацииАгрегаты.ВремяВыполненияСуммаОбратная КАК ЧИСЛО(15, 3)) КАК ВремяВыполненияСреднееГармоническое,
	втКлючевыеОперацииАгрегаты.КоличествоЗамеров КАК КоличествоЗамеров,
	втКлючевыеОперацииАгрегаты.ВремяВыполненияСуммаОбратная КАК ВремяВыполненияСуммаОбратная
ПОМЕСТИТЬ втКлючевыеОперацииСреднееГармоническое
ИЗ
	втКлючевыеОперацииАгрегаты КАК втКлючевыеОперацииАгрегаты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втКлючевыеОперацииАгрегаты.КлючеваяОперация КАК КлючеваяОперация,
	втКлючевыеОперацииАгрегаты.ВремяВыполненияСуммаКвадратическая / втКлючевыеОперацииАгрегаты.КоличествоЗамеров КАК ВремяВыполненияСуммаКвадратическаяСредняя,
	втКлючевыеОперацииАгрегаты.ВремяВыполненияСуммаКвадратическая КАК ВремяВыполненияСуммаКвадратическая,
	втКлючевыеОперацииАгрегаты.КоличествоЗамеров КАК КоличествоЗамеров
ПОМЕСТИТЬ втКлючевыеОперацииКвадратическоеАгрегаты
ИЗ
	втКлючевыеОперацииАгрегаты КАК втКлючевыеОперацииАгрегаты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	SQRTS.КлючеваяОперация КАК КлючеваяОперация,
	ВЫРАЗИТЬ((((SQRTS.Y + SQRTS.X / SQRTS.Y) / 2 + SQRTS.X / ((SQRTS.Y + SQRTS.X / SQRTS.Y) / 2)) / 2 + SQRTS.X / (((SQRTS.Y + SQRTS.X / SQRTS.Y) / 2 + SQRTS.X / ((SQRTS.Y + SQRTS.X / SQRTS.Y) / 2)) / 2)) / 2 КАК ЧИСЛО(15, 3)) КАК ВремяВыполненияСреднееКвадратическое,
	SQRTS.X КАК ВремяВыполненияСуммаКвадратическаяСредняя
ПОМЕСТИТЬ втКлючевыеОперацииСреднееКвадратическое
ИЗ
	(ВЫБРАТЬ
		втКлючевыеОперацииКвадратическоеАгрегаты.КлючеваяОперация КАК КлючеваяОперация,
		втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя КАК X,
		ВЫБОР
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 0
				ТОГДА NULL
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 0.000001
				ТОГДА 0.0005623413251903491
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 0.00001
				ТОГДА 0.001778279410038923
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 0.0001
				ТОГДА 0.005623413251903491
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 0.001
				ТОГДА 0.01778279410038923
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 0.01
				ТОГДА 0.05623413251903491
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 0.1
				ТОГДА 0.1778279410038923
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 1
				ТОГДА 0.5623413251903491
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 10
				ТОГДА 1.778279410038923
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 100
				ТОГДА 5.623413251903491
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 1000
				ТОГДА 17.78279410038923
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 10000
				ТОГДА 56.23413251903491
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 100000
				ТОГДА 177.8279410038923
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 1000000
				ТОГДА 562.3413251903491
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 10000000
				ТОГДА 1778.279410038923
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 100000000
				ТОГДА 5623.413251903491
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 1000000000
				ТОГДА 17782.79410038923
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 10000000000
				ТОГДА 56234.13251903491
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 100000000000
				ТОГДА 177827.9410038923
			КОГДА втКлючевыеОперацииКвадратическоеАгрегаты.ВремяВыполненияСуммаКвадратическаяСредняя < 1000000000000
				ТОГДА 562341.3251903491
			ИНАЧЕ NULL
		КОНЕЦ КАК Y
	ИЗ
		втКлючевыеОперацииКвадратическоеАгрегаты КАК втКлючевыеОперацииКвадратическоеАгрегаты) КАК SQRTS
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втКлючевыеОперацииАгрегаты.КлючеваяОперация КАК КлючеваяОперация,
	ВЫБОР
		КОГДА втКлючевыеОперацииАгрегаты.НомерСтрокиСередина = втКлючевыеОперацииАгрегаты.НомерСтрокиСерединаЦелое
			ТОГДА втКлючевыеОперацииАгрегаты.НомерСтрокиМинимум + втКлючевыеОперацииАгрегаты.НомерСтрокиСередина
		ИНАЧЕ втКлючевыеОперацииАгрегаты.НомерСтрокиМинимум + втКлючевыеОперацииАгрегаты.НомерСтрокиСерединаЦелое - 1
	КОНЕЦ КАК НомерСтрокиСерединаНижняя,
	ВЫБОР
		КОГДА втКлючевыеОперацииАгрегаты.НомерСтрокиСередина = втКлючевыеОперацииАгрегаты.НомерСтрокиСерединаЦелое
			ТОГДА втКлючевыеОперацииАгрегаты.НомерСтрокиМинимум + втКлючевыеОперацииАгрегаты.НомерСтрокиСередина
		ИНАЧЕ втКлючевыеОперацииАгрегаты.НомерСтрокиМинимум + втКлючевыеОперацииАгрегаты.НомерСтрокиСерединаЦелое
	КОНЕЦ КАК НомерСтрокиСерединаВерхняя
ПОМЕСТИТЬ втКлючевыеОперацииМедианаАгрегаты
ИЗ
	втКлючевыеОперацииАгрегаты КАК втКлючевыеОперацииАгрегаты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втКлючевыеОперацииМедианаАгрегаты.КлючеваяОперация КАК КлючеваяОперация,
	ВЫРАЗИТЬ((втЗамерыВремениПоВозрастаниюНижняя.ВремяВыполнения + втЗамерыВремениПоВозрастаниюВерхняя.ВремяВыполнения) / 2 КАК ЧИСЛО(15, 3)) КАК ВремяВыполненияСреднееМедиана,
	втЗамерыВремениПоВозрастаниюНижняя.ВремяВыполнения КАК ВремяВыполненияСреднееНижнее,
	втЗамерыВремениПоВозрастаниюВерхняя.ВремяВыполнения КАК ВремяВыполненияСреднееВерхнее
ПОМЕСТИТЬ втКлючевыеОперацииСреднееМедиана
ИЗ
	втКлючевыеОперацииМедианаАгрегаты КАК втКлючевыеОперацииМедианаАгрегаты
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втЗамерыВремениПоВозрастанию КАК втЗамерыВремениПоВозрастаниюНижняя
		ПО втКлючевыеОперацииМедианаАгрегаты.КлючеваяОперация = втЗамерыВремениПоВозрастаниюНижняя.КлючеваяОперация
			И втКлючевыеОперацииМедианаАгрегаты.НомерСтрокиСерединаНижняя = втЗамерыВремениПоВозрастаниюНижняя.НомерСтроки
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втЗамерыВремениПоВозрастанию КАК втЗамерыВремениПоВозрастаниюВерхняя
		ПО втКлючевыеОперацииМедианаАгрегаты.КлючеваяОперация = втЗамерыВремениПоВозрастаниюВерхняя.КлючеваяОперация
			И втКлючевыеОперацииМедианаАгрегаты.НомерСтрокиСерединаВерхняя = втЗамерыВремениПоВозрастаниюВерхняя.НомерСтроки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втЗамерыВремениПоВозрастанию.КлючеваяОперация КАК КлючеваяОперация,
	втЗамерыВремениПоВозрастанию.ВремяВыполнения КАК ВремяВыполнения,
	КОЛИЧЕСТВО(втЗамерыВремениПоВозрастанию.ВремяВыполнения) КАК КоличествоЗамеров
ПОМЕСТИТЬ втЗамерыВремениМода
ИЗ
	втЗамерыВремениПоВозрастанию КАК втЗамерыВремениПоВозрастанию

СГРУППИРОВАТЬ ПО
	втЗамерыВремениПоВозрастанию.КлючеваяОперация,
	втЗамерыВремениПоВозрастанию.ВремяВыполнения
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втЗамерыВремениМода.КлючеваяОперация КАК КлючеваяОперация,
	МАКСИМУМ(втЗамерыВремениМода.КоличествоЗамеров) КАК КоличествоЗамеровМаксимум
ПОМЕСТИТЬ втКлючевыеОперацииМодаАгрегаты
ИЗ
	втЗамерыВремениМода КАК втЗамерыВремениМода

СГРУППИРОВАТЬ ПО
	втЗамерыВремениМода.КлючеваяОперация
;

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

СГРУППИРОВАТЬ ПО
	втЗамерыВремениМода.КлючеваяОперация,
	втКлючевыеОперацииМодаАгрегаты.КоличествоЗамеровМаксимум
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втКлючевыеОперацииАгрегаты.КлючеваяОперация КАК КлючеваяОперация,
	втКлючевыеОперацииАгрегаты.КоличествоУсечения КАК КоличествоУсечения,
	втКлючевыеОперацииАгрегаты.НомерСтрокиМинимум + втКлючевыеОперацииАгрегаты.КоличествоУсечения КАК НомерСтрокиМинимумУсредненный,
	втКлючевыеОперацииАгрегаты.НомерСтрокиМаксимум - втКлючевыеОперацииАгрегаты.КоличествоУсечения КАК НомерСтрокиМаксимумУсредненный,
	втКлючевыеОперацииАгрегаты.КоличествоЗамеров КАК КоличествоЗамеров,
	втКлючевыеОперацииАгрегаты.КоличествоЗамеров - втКлючевыеОперацииАгрегаты.КоличествоУсечения * 2 КАК КоличествоЗамеровУсеченное
ПОМЕСТИТЬ втКлючевыеОперацииУсреднениеАгрегатыИсходные
ИЗ
	втКлючевыеОперацииАгрегаты КАК втКлючевыеОперацииАгрегаты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втЗамерыВремениПоВозрастанию.НомерСтроки КАК НомерСтроки,
	втЗамерыВремениПоВозрастанию.КлючеваяОперация КАК КлючеваяОперация,
	втЗамерыВремениПоВозрастанию.ВремяВыполнения КАК ВремяВыполнения,
	ВЫБОР
		КОГДА втЗамерыВремениПоВозрастанию.НомерСтроки < втКлючевыеОперацииУсреднениеАгрегатыИсходные.НомерСтрокиМинимумУсредненный
			ТОГДА 0
		КОГДА втЗамерыВремениПоВозрастанию.НомерСтроки > втКлючевыеОперацииУсреднениеАгрегатыИсходные.НомерСтрокиМаксимумУсредненный
			ТОГДА 0
		ИНАЧЕ втЗамерыВремениПоВозрастанию.ВремяВыполнения
	КОНЕЦ КАК ВремяВыполненияУсеченное,
	ВЫБОР
		КОГДА втЗамерыВремениПоВозрастанию.НомерСтроки < втКлючевыеОперацииУсреднениеАгрегатыИсходные.НомерСтрокиМинимумУсредненный
			ТОГДА втЗамерыВремениПоВозрастаниюМинимум.ВремяВыполнения
		КОГДА втЗамерыВремениПоВозрастанию.НомерСтроки > втКлючевыеОперацииУсреднениеАгрегатыИсходные.НомерСтрокиМаксимумУсредненный
			ТОГДА втЗамерыВремениПоВозрастаниюМаксимум.ВремяВыполнения
		ИНАЧЕ втЗамерыВремениПоВозрастанию.ВремяВыполнения
	КОНЕЦ КАК ВремяВыполненияВинсозированное
ПОМЕСТИТЬ втЗамерыВремениУсреднение
ИЗ
	втЗамерыВремениПоВозрастанию КАК втЗамерыВремениПоВозрастанию
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКлючевыеОперацииУсреднениеАгрегатыИсходные КАК втКлючевыеОперацииУсреднениеАгрегатыИсходные
		ПО втЗамерыВремениПоВозрастанию.КлючеваяОперация = втКлючевыеОперацииУсреднениеАгрегатыИсходные.КлючеваяОперация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втЗамерыВремениПоВозрастанию КАК втЗамерыВремениПоВозрастаниюМинимум
		ПО втЗамерыВремениПоВозрастанию.КлючеваяОперация = втЗамерыВремениПоВозрастаниюМинимум.КлючеваяОперация
			И (втКлючевыеОперацииУсреднениеАгрегатыИсходные.НомерСтрокиМинимумУсредненный = втЗамерыВремениПоВозрастаниюМинимум.НомерСтроки)
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втЗамерыВремениПоВозрастанию КАК втЗамерыВремениПоВозрастаниюМаксимум
		ПО втЗамерыВремениПоВозрастанию.КлючеваяОперация = втЗамерыВремениПоВозрастаниюМаксимум.КлючеваяОперация
			И (втКлючевыеОперацииУсреднениеАгрегатыИсходные.НомерСтрокиМаксимумУсредненный = втЗамерыВремениПоВозрастаниюМаксимум.НомерСтроки)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втЗамерыВремениУсреднение.КлючеваяОперация КАК КлючеваяОперация,
	МИНИМУМ(втЗамерыВремениУсреднение.ВремяВыполненияВинсозированное) КАК ВремяВыполненияМинимумУсредненный,
	МАКСИМУМ(втЗамерыВремениУсреднение.ВремяВыполненияВинсозированное) КАК ВремяВыполненияМаксимумУсредненный,
	СУММА(втЗамерыВремениУсреднение.ВремяВыполненияУсеченное) КАК ВремяВыполненияСуммаУсеченная,
	СУММА(втЗамерыВремениУсреднение.ВремяВыполненияВинсозированное) КАК ВремяВыполненияСуммаВинсозированная,
	МАКСИМУМ(втКлючевыеОперацииУсреднениеАгрегатыИсходные.КоличествоЗамеров) КАК КоличествоЗамеров,
	МАКСИМУМ(втКлючевыеОперацииУсреднениеАгрегатыИсходные.КоличествоЗамеровУсеченное) КАК КоличествоЗамеровУсеченное
ПОМЕСТИТЬ втКлючевыеОперацииУсреднениеАгрегаты
ИЗ
	втЗамерыВремениУсреднение КАК втЗамерыВремениУсреднение
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКлючевыеОперацииУсреднениеАгрегатыИсходные КАК втКлючевыеОперацииУсреднениеАгрегатыИсходные
		ПО втЗамерыВремениУсреднение.КлючеваяОперация = втКлючевыеОперацииУсреднениеАгрегатыИсходные.КлючеваяОперация

СГРУППИРОВАТЬ ПО
	втЗамерыВремениУсреднение.КлючеваяОперация
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втКлючевыеОперацииУсреднениеАгрегаты.КлючеваяОперация КАК КлючеваяОперация,
	ВЫРАЗИТЬ(втКлючевыеОперацииУсреднениеАгрегаты.ВремяВыполненияСуммаУсеченная / втКлючевыеОперацииУсреднениеАгрегаты.КоличествоЗамеровУсеченное КАК ЧИСЛО(15, 3)) КАК ВремяВыполненияСреднееУсеченное,
	втКлючевыеОперацииУсреднениеАгрегаты.ВремяВыполненияСуммаУсеченная КАК ВремяВыполненияСуммаУсеченная,
	втКлючевыеОперацииУсреднениеАгрегаты.КоличествоЗамеровУсеченное КАК КоличествоЗамеровУсеченное
ПОМЕСТИТЬ втКлючевыеОперацииСреднееУсеченное
ИЗ
	втКлючевыеОперацииУсреднениеАгрегаты КАК втКлючевыеОперацииУсреднениеАгрегаты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втКлючевыеОперацииУсреднениеАгрегаты.КлючеваяОперация КАК КлючеваяОперация,
	ВЫРАЗИТЬ(втКлючевыеОперацииУсреднениеАгрегаты.ВремяВыполненияСуммаВинсозированная / втКлючевыеОперацииУсреднениеАгрегаты.КоличествоЗамеров КАК ЧИСЛО(15, 3)) КАК ВремяВыполненияСреднееВинсозированное,
	втКлючевыеОперацииУсреднениеАгрегаты.ВремяВыполненияСуммаВинсозированная КАК ВремяВыполненияСуммаВинсозированная,
	втКлючевыеОперацииУсреднениеАгрегаты.КоличествоЗамеров КАК КоличествоЗамеров
ПОМЕСТИТЬ втКлючевыеОперацииСреднееВинсозированное
ИЗ
	втКлючевыеОперацииУсреднениеАгрегаты КАК втКлючевыеОперацииУсреднениеАгрегаты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	втКлючевыеОперацииАгрегаты.КлючеваяОперация КАК КлючеваяОперация,
	втКлючевыеОперацииАгрегаты.КоличествоЗамеров КАК КоличествоЗамеров,
	втКлючевыеОперацииАгрегаты.ВремяВыполненияМинимум КАК ВремяВыполненияМинимум,
	втКлючевыеОперацииУсреднениеАгрегаты.ВремяВыполненияМинимумУсредненный КАК ВремяВыполненияМинимумУсредненный,
	втКлючевыеОперацииАгрегаты.ВремяВыполненияМаксимум КАК ВремяВыполненияМаксимум,
	втКлючевыеОперацииУсреднениеАгрегаты.ВремяВыполненияМаксимумУсредненный КАК ВремяВыполненияМаксимумУсредненный,
	втКлючевыеОперацииАгрегаты.ВремяВыполненияСреднее КАК ВремяВыполненияСреднее,
	втКлючевыеОперацииСреднееАрифметическое.ВремяВыполненияСреднееАрифметическое КАК ВремяВыполненияСреднееАрифметическое,
	втКлючевыеОперацииСреднееГармоническое.ВремяВыполненияСреднееГармоническое КАК ВремяВыполненияСреднееГармоническое,
	втКлючевыеОперацииСреднееКвадратическое.ВремяВыполненияСреднееКвадратическое КАК ВремяВыполненияСреднееКвадратическое,
	втКлючевыеОперацииСреднееМедиана.ВремяВыполненияСреднееМедиана КАК ВремяВыполненияСреднееМедиана,
	втКлючевыеОперацииСреднееМода.ВремяВыполненияСреднееМода КАК ВремяВыполненияСреднееМода,
	втКлючевыеОперацииСреднееУсеченное.ВремяВыполненияСреднееУсеченное КАК ВремяВыполненияСреднееУсеченное,
	втКлючевыеОперацииСреднееВинсозированное.ВремяВыполненияСреднееВинсозированное КАК ВремяВыполненияСреднееВинсозированное
ПОМЕСТИТЬ втКлючевыеОперацииСтатистика
ИЗ
	втКлючевыеОперацииАгрегаты КАК втКлючевыеОперацииАгрегаты
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКлючевыеОперацииСреднееАрифметическое КАК втКлючевыеОперацииСреднееАрифметическое
		ПО втКлючевыеОперацииАгрегаты.КлючеваяОперация = втКлючевыеОперацииСреднееАрифметическое.КлючеваяОперация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКлючевыеОперацииСреднееГармоническое КАК втКлючевыеОперацииСреднееГармоническое
		ПО втКлючевыеОперацииАгрегаты.КлючеваяОперация = втКлючевыеОперацииСреднееГармоническое.КлючеваяОперация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКлючевыеОперацииСреднееКвадратическое КАК втКлючевыеОперацииСреднееКвадратическое
		ПО втКлючевыеОперацииАгрегаты.КлючеваяОперация = втКлючевыеОперацииСреднееКвадратическое.КлючеваяОперация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКлючевыеОперацииСреднееМедиана КАК втКлючевыеОперацииСреднееМедиана
		ПО втКлючевыеОперацииАгрегаты.КлючеваяОперация = втКлючевыеОперацииСреднееМедиана.КлючеваяОперация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКлючевыеОперацииСреднееМода КАК втКлючевыеОперацииСреднееМода
		ПО втКлючевыеОперацииАгрегаты.КлючеваяОперация = втКлючевыеОперацииСреднееМода.КлючеваяОперация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКлючевыеОперацииУсреднениеАгрегаты КАК втКлючевыеОперацииУсреднениеАгрегаты
		ПО втКлючевыеОперацииАгрегаты.КлючеваяОперация = втКлючевыеОперацииУсреднениеАгрегаты.КлючеваяОперация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКлючевыеОперацииСреднееУсеченное КАК втКлючевыеОперацииСреднееУсеченное
		ПО втКлючевыеОперацииАгрегаты.КлючеваяОперация = втКлючевыеОперацииСреднееУсеченное.КлючеваяОперация
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКлючевыеОперацииСреднееВинсозированное КАК втКлючевыеОперацииСреднееВинсозированное
		ПО втКлючевыеОперацииАгрегаты.КлючеваяОперация = втКлючевыеОперацииСреднееВинсозированное.КлючеваяОперация

 

Меры центральной тенденции (вычисление среднего) в запросе

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159833    876    399    

862

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    9998    sergey279    18    

64

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    5235    XilDen    36    

80

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    7971    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

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

08.07.2024    2416    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    8758    implecs_team    6    

47

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3401    andrey_sag    10    

36
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Eremkin 03.09.20 08:28 Сейчас в теме
За исследование и работу однозначно плюс. Это даже не оспаривается. Но объясните мне зачем такие вычисления в запросе? Зачем грузить СУБД? Или может я чего-то не понимаю?
2. parcan 67 03.09.20 12:33 Сейчас в теме
(1) Если вам нужно посчитать один массив данных, то ни к чему.
4. Eremkin 03.09.20 13:06 Сейчас в теме
(2) А если большой объем данных?
5. parcan 67 03.09.20 16:45 Сейчас в теме
(4) То запросом все быстро обсчитается, там простая математика.
3. aspirator23 339 03.09.20 13:01 Сейчас в теме
В качестве эксперта сюда бы Ильдаровича.
6. AnatolPopov 173 15.09.20 19:27 Сейчас в теме
Исходные данные неверны ;) Набиуллина не может так мало получать ;)))
7. пользователь 20.03.23 11:00
Сообщение было скрыто модератором.
...
Оставьте свое сообщение