SQL中选择列时括号有啥作用?

Posted

技术标签:

【中文标题】SQL中选择列时括号有啥作用?【英文标题】:what effect does parenthesis have when selecting a column in SQL?SQL中选择列时括号有什么作用? 【发布时间】:2020-03-06 20:21:16 【问题描述】:

我在 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);

我认为没有必要将(年份)作为年份等,所以我删除了它们并这样做:

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;

我希望得到相同的输出,但 numeric_val 的差异只有百分之几。那是什么呀?

我尝试了几次实验,并且仅使用一个查询(无联合),与“(年)作为年”等相比,使用“年”得到了相同的确切结果。联合发生了一些变化。

你能猜出为什么“(年)作为年”部分会改变联合中的输出吗?

【问题讨论】:

可能是查询结果缓存?您更改了查询文本,使其在逻辑上保持不变,但原始查询可能已被缓存 您能否提供一些示例输入和输出来演示您所描述的内容? 【参考方案1】:

sum()ed 号码的数据类型是什么?

特别是浮点类型是近似的。此外,将它们相加的顺序会影响结果。这与根据加法顺序以不同方式累积的舍入误差有关。

你没有提供太多信息,所以这是我最好的猜测,为什么你会得到相似但略有不同的答案。

【讨论】:

以上是关于SQL中选择列时括号有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

SQL面试题:有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列

在oracle中选择第n列时出错[重复]

更新另一列时自动更新sql列

尝试从 MySql 中的不同表中选择列时出错

在选择列时添加新行 # 取决于循环 #

尝试在 SQL Plus 查询中小写列时出错