我试图理解为什么GROUP BY函数会根据我引用GROUP-BY字段的方式在snowflake中产生不同的结果.以下是我认为应该产生相同结果的两个查询,但事实并非如此:

使用显式字段别名引用的查询:

select
    hash('SHA2_256', CONCAT(field1,field2,field3,field4)) as hash
    ,field1
    ,field2
    ,field3
    ,field4
    ,count(*) as count
from <table>
    where 
        <some filters>
    group by hash, field1, field2, field3, field4;

使用对字段的位置引用进行查询:

select
    hash('SHA2_256', CONCAT(field1,field2,field3,field4)) as hash
    ,field1
    ,field2
    ,field3
    ,field4
    ,count(*) as count
from <table>
    where 
        <same filters as above>
    group by 1,2,3,4,5;

第一个查询生成的记录要多得多,这表明它可能没有应用第二个查询中应用的分组字段,但基于snowflake docs条记录,我认为它们应该是相同的.这两个有什么不同?

推荐答案

线索是别名表达式hash不会遮盖现有列,因此:

select
     hash('SHA2_256', CONCAT(field1,field2,field3,field4)) as hash
    ,field1
    ,field2
    ,field3
    ,field4
    ,count(*) as count
from <table>
where <some filters>
group by hash, field1, field2, field3, field4;

select
     hash('SHA2_256', CONCAT(field1,field2,field3,field4)) as hash
    ,field1
    ,field2
    ,field3
    ,field4
    ,count(*) as count
from <table>
where <some filters>
group by <table>.hash, field1, field2, field3, field4;

which 是 different than:

select
     hash('SHA2_256', CONCAT(field1,field2,field3,field4)) as hash
    ,field1
    ,field2
    ,field3
    ,field4
    ,count(*) as count
from <table>
where <same filters as above>
group by 1,2,3,4,5;

Sql相关问答推荐

我可以将INSERT语句与SELECT一起使用来创建条件吗?

如何在联接条件不匹配时按日期获取上一条记录

数据库索引:如何使用名称和类别对项目进行最佳索引?

当交叉联接3个或更多表时,实体框架中是否会传输冗余的行数据并占用数据库带宽?

Ffltter&;Dart SQL Lite包:是否可以在一个查询中执行多条更新语句(每次执行不同的WHERE参数)

SQL:如何将相应位置的两个数组中的元素组合在一起

更新其组的日期字段值小于最大日期减go 天数的记录

对表进行多项 Select 以返回最大值和时间

在SQL GROUP BY中的某些行之后执行计算

在WHERE EXISTS子查询中,列返回是否重要?

如何使用SQL生成数据的滚动3天总和

使用CTE在SNOWFLAKE中创建临时表

我需要在 ASP.NET C# 中获取 2 个 SQL 查询结果的平均值

复制行并根据 Oracle SQL 中其他表的值更改值

获取所有用户的第一次和最后一次发货以及到达日期

SQL:无重复项的两个聚合函数

SQL:如何从时间戳数据生成时间序列并计算不同事件类型的累计总和?

如何根据 ID 和指标从 2 个表中找到不同的值?

BigQuery 错误:SELECT 列表表达式引用 esthetician.LICENSE_TYPE,它既未在 [49:8] 分组也未聚合

在 PostgreSQL 中,如何将数组中的每个元素用作另一个表中的键?