BigQuery获取列唯一字符串 分组聚合查询报错解决方法
问题原因
- 冗余使用
DISTINCT:GROUP BY 分组字段的执行逻辑本身就会返回去重后的分组字段值,不需要额外加DISTINCT修饰。部分SQL解析引擎遇到这种冗余写法时,会错误将分组字段识别为字面量,触发Cannot GROUP BY literal values报错。 - 字段缺失:原查询没有返回需求要求的
average_order_size字段,即使不报错输出结果也不符合预期。由于同一个store_name对应的average_order_size是固定值,不会随同组内的订单记录变化,只需要在分组时补充处理该字段即可。
正确实现方式
直接使用分组聚合,去掉冗余的DISTINCT,同时补充需要返回的average_order_size字段即可,语句如下:
SELECT SUM(orders) AS sum_orders, store_name, average_order_size FROM `a_database.database` GROUP BY store_name, average_order_size
执行后返回的结果和预期完全一致:
- 店铺ABCD:订单总和35+43+78=156,平均订单大小2
- 店铺XYZ:订单总和41+34=75,平均订单大小3
- 店铺HIJ:订单总和85+23=108,平均订单大小12
如果使用的SQL引擎支持ANY_VALUE()函数(用来返回分组内该字段的任意值,适合同组内该字段值完全一致的场景),也可以用下面的写法,不需要把average_order_size加到分组字段中,兼容性更强:
SELECT SUM(orders) AS sum_orders, store_name, ANY_VALUE(average_order_size) AS average_order_size FROM `a_database.database` GROUP BY store_name
内容的提问来源于stack exchange,提问作者jd_h2003
相关产品推荐
相关产品推荐

