select min(val) from (select '10026096' as val union select '1002793' as val);
上面的sql查询返回以下输出:
MIN(VAL)
10026096
请帮助我理解为什么 snowflake 在两者中给出更大的数字作为输出。它如何在 min 函数中处理数字字符串。
使用正确的数据类型保存数据是关键,INT != STRING。
1 0 0 2 6 0 9 6
= = = = <
1 0 0 2 7 9 3
因此字符串
10026096
低于 1002793
.
SELECT '10026096' < '1002793'
, 10026096 < 1002793;
输出:
'10026096'< '1002793' | 10026096 < 1002793 |
---|---|
真实 | 假 |
在您的情况下,这是因为您的“数字”值在引号中,因此它们作为字符串工作并按字母顺序进行比较。
您可以使用“订单”来验证:
select * from (select '10026096' as val union select '1002793' as val) order by val;
如果你想进行数值比较,你应该使用数字而不是字符串:
select min(val) from (select 10026096 as val union select 1002793 as val);