Пару недель назад я переписывал скрипт витрины данных. Нужно было сделать из дашборда, который каждый год приходилось обновлять вручную, дашборд, который будет автоматически подтягивать данные по годам (но об этом подробнее расскажу в другой заметке). Так вот, когда я сделал новый скрипт, то начал сравнивать данные с текущей визуализацией: где-то сходилось, а где-то были расхождения. Сначала я подумал, что где-то ошибся, но странно — много где сходится ведь. В данном проекте происходит миграция с Greenplum на ClickHouse, поэтому есть свои особенности, на которые я изначально и подумал. Одна из них: нужно делать ORDER BY уникальным, чтобы при переносе в колоночную систему данные приходили в полном объеме и правильном порядке. Когда я выставил сортировку и несколько раз подряд запустил скрипт, то заметил, что расчетные значения меняются. Я залез в текущий скрипт и увидел DISTINCT ON и UNION. Суть в том, что DISTINCT ON выбирал только одну строку из нескольких, а набор для сортировки был