Как влияет скобка при выборе столбца в SQL? - PullRequest
0 голосов
/ 06 марта 2020

У меня необычная проблема в Redshift (postgreSQL). Копировать здесь слишком долго, но у кого-то в моей команде был такой код:

select (year) as year, (month) as month, (other_col) as other_col, sum(numerical_val) as num
from big_table
where (a few conditions)
group by (year), (month), (other_col)
union
select (year) as year, (month) as month, (other_col) as other_col, sum(numerical_val) as num
from big_table
where (more specific condition)
group by (year), (month), (other_col);

Я не думал, что нужно указывать (год) как год и т. Д. c., Поэтому я удалил они и делали так:

select year, month, other_col, sum(numerical_val) as num
from big_table
where (a few conditions)
group by year, month, other_col
union
select year, month, other_col, sum(numerical_val) as num
from big_table
where (more specific condition)
group by year, month, other_col;

Я ожидал того же результата, но числовой_пропуск отличается от доли процента. Что это за фигня?

Я попробовал несколько экспериментов, и только с одним запросом (без объединения) я получаю тот же самый точный результат, используя "год" по сравнению с "(год), как год" et c. Что-то меняется с союзом.

Можете ли вы предположить, почему части "(год) как год" изменили бы выход в объединении?

1 Ответ

2 голосов
/ 06 марта 2020

Какими типами данных являются числа sum() ed?

В частности, типы с плавающей запятой приблизительные . Более того, порядок их добавления может повлиять на результаты. Это связано с ошибками округления, которые накапливаются по-разному в зависимости от порядка добавления.

Вы не предоставляете много информации, поэтому я предпочитаю, почему вы получите похожие, но немного другие ответы.

...