Столкнулся с не очевидным поведением запросов СКД при группировках во временных таблицах.
Необходимо было выбрать уникальные записи во временную таблицу для того, чтобы в дальнейшем посчитать средние значения.
Таблица примерно такая:
Сделка | Диапазон | Сумма |
Сделка 1 | 10-20 | 12 |
Сделка 1 | 10-20 | 12 |
Сделка 2 | 10-20 | 12 |
Сделка 3 | 10-20 | 18 |
Сделка 4 | 20-30 | 25 |
Делаю выборку во временную таблицу с помощью конструкции ВЫБРАТЬ РАЗЛИЧНЫЕ. Получаю такую таблицу:
Сделка | Диапазон | Сумма |
Сделка 1 | 10-20 | 12 |
Сделка 2 | 10-20 | 12 |
Сделка 3 | 10-20 | 18 |
Сделка 4 | 20-30 | 25 |
Т.е. строка по "Сделка 1" ушла. Все хорошо. Далее создаю следующую временную таблицу, где группирую по диапазонам и нахожу среднюю сумму, без учета сделок. Другими словами хочу получить таблицу вида:
Диапазон | Сумма |
10-20 | 14 |
20-30 | 25 |
где 14 = (12+12+18)/3. Но вместо ожидаемого результата получается не 14, а 15. Как выяснилось вторая временная таблица каким-то образом наследует настройки первой временной таблицы (из которой она получена). И в итоге мы имеем (12+18)/2 = 15. Хотя во второй таблице я уже не писал ВЫБРАТЬ РАЗЛИЧНЫЕ, а писал просто ВЫБРАТЬ.
Пробовал вместо ВЫБРАТЬ РАЗЛИЧНЫЕ группировать первую таблицу по всем полям. Результат тот же - вторая таблица получалась опять с уникальными записями по выбранным полям.
В итоге, чтобы получить нужный мне результат пришлось во второй временной таблице сначала делать вложенный запрос, куда выбирать данные из первой временной таблицы, а потом уже из него производить выборку и группировку.
Добрый день, уважаемый Allexx.
Столкнулся с подобной ситуацией, Спасибо помогло)
Отправить комментарий