Это указывает на то, что вам не следует использовать значения с плавающей запятой (в данном случае, вероятно, UNITPRICE
значение) в схеме агрегации (сгруппировать), поскольку их выходные данные являются недетерминированными (то есть могут изменяться в зависимости от изменения точности).Например, рассмотрим этот пример:
WITH
data AS (
SELECT 100 AS id, 'abc' as item, 0.3448473362800000001 AS unitprice
UNION ALL
SELECT 200 AS id, 'xyz' as item, 0.49300013 AS unitprice
UNION ALL
SELECT 500 AS id, 'pqr' as item, 0.67322332200000212 AS unitprice
)
select id, item, unitprice from data
group by id, item, unitprice
Выход для этого будет:
100 abc 0.34484733628
200 xyz 0.49300013
500 pqr 0.6732233220000021
, в котором значения unitprice
выглядят немного по-другому.
Чтобы избежать этого, вы можете пойти двумя путями:
- Вы можете разыграть свою цену в виде строки, а затем продолжить группировку.Что-то вроде
cast(unitprice as string) as unitprice
в вашем запросе. - Вы можете просто оставить
unitprice
в качестве не сгруппированной сущности (что в большинстве случаев является логическим вариантом) и просто выполнить max(unitprice) as unitprice
или avg(unitprice) as unitprice
в вашем запросе при группировке по id, item
.
Надеюсь, это поможет.