• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Запрос, Общие Итоги, Не Понимаю Как Считаются

  • Автор темы Истребитель
  • Дата начала
И

Истребитель

Добрый день!

Раньше я думал что знаю, что такое итоги. Думал, что Итоги это то же самое, что группировка, только с сохранением группируемых строк.

Т.е. если скажем есть таблица:
А Х 100
А У 200
Б Z 300

То группировка с суммой по последнему столбцу выдаст одну строку с цифрой - 600
А общие итоги добавят строку <пусто><пусто>600. И можно будет обходом по группировкам получить одну эту строку, либо все остальнчые

Как например здесь

Однако, сейчас у меня есть запрос, в котором это НЕ работает. Вообще. То есть в запросе есть общие итоги. Однако, цифра в строке с общими итогами никак не равняется сумме остальных цифр в этом столбце. Ни для какого из столбцов. Например, итог выдается 175 000 а сумма по столбцу - 100 000. Если кто интересуется - это запрос из отчета "ведомость взаиморассчетов с контрагентами" из конфигурации Управление Торговлей 10.3. Текст запроса в аттаче (очень большой чтобы в пост вставлять).

Подскажите, как так может быть? Везде, где ни читал, пишут что общие итоги выдают цифры, идентичные группировке. Однако замена итоги по ... общие на сгруппировать по выдает ту же цифру, что при ручном суммировании столбцов, т.е. отличную от итогов. (напр. 100 000 против 170 000)

Посмотреть вложение tmp.txt
 
Д

Дайнеко

Да, нет мозгов разобраться с запросом.
 
U

unknown181538

Что он не сходится, смотрите в консоли запросов?
 
И

Истребитель

И в консоли запросов, и сделал свой внешний запрос по этому тексту. Итоги не сходятся совершенно с суммой по столбцам.
И логика запроса на этом и основана - например там есть такая ситуация (упрощенный пример):

Запрос сделан с целью узнать, сколько за период было движений (денег) по взаиморассчетом с таким то контрагентом по такомуто договору. Т.е. есть остаток на начало периода, документы, делавшие движение за период, и остаток на конец периода. Каждый документ делает либо приход либо расход (плюс или минус к остатку). И может быть такая ситуация:

Столбцы: Договор, Документ, ОстатокНаНачалоПериода, Приход, Расход, ОстатокНаКонецПериода

Строчки:

[Договор такойто] . [Док N1 от 01.01.2012 09:00] . [10 000] . [1 000] . [0] . [11 000]
[Договор такойто] . [Док N2 от 01.01.2012 12:00] . [11 000] . [4 000] . [0] . [15 000]
[Договор такойто] . [Док N3 от 01.01.2012 12:00] . [11 000] . [1 000] . [0] . [12 000]

А в итоговой строчке, очевидно, будет следующая запись:

[Договор такойто] . [10 000] . [6 000] . [0] . [16 000]

Так вот, итоги сворачиваются по полю "договор", и это логично, что они сворачиваются именно так, а не вот так:

[Договор такойто] . [32 000] . [6 000] . [0] . [38 000]

Но вопрос - откуда механизм запросов знает, что нужно найти значение из столбца "ОстатокНаНачалоПериода", соответствующее строке с наименьшей датой, к нему прибавить все значения столбцов "Приход", и отнять все значения столбцов "Расход", и результирующее значение записать в столбец "ОстатокНаКонецПериода"? А значение в "ОстатокНаНачалоПериода" поместить то самое, с меньшей датой, вообще не суммируя, а значение в "Приход" поместить как раз суммируя...

Где эта логика прописана, откуда она программе известна?
 
U

unknown181538

В СКД есть такая штука, как Роль поля. В построителе наверное тоже. Это позволяет отчету догадаться.
 
И

Истребитель

Но это запрос через универсальный отчет. Там поидее, как я понял, "скармливается" текст запроса, псевдонимы полей и определяется, какое поле итоговое а какое группировочное... Хотя, посмотрю, может где-то это и указано через построитель...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!