sql - 将具有 N-1 个相同列和 1 个不同列的多行合并为一行,保留前 N-1 列并对最后一列求和
问题描述
我有一个查询,它生成一个包含 26 列的表,AZ。对于某些行,AY 列是相同的,而 Z 列是唯一不同的。是否有一种简单而干净的方法来组合重复的行,使得 AY 列相同并且 Z 列相加?我的解决方案是做类似的事情
SELECT A, B, C,...,Y,SUM(Z)
-- lots of work
FROM [table produced by multiple joins]
GROUP BY A, B, C,...,Y
最后一个GROUP BY
子句很长。如果从SELECT
语句中添加或删除列,也容易出错。这是完成我想做的事情的唯一方法吗?
解决方案
以下是 BigQuery 标准 SQL
#standardSQL
SELECT
ANY_VALUE((SELECT AS STRUCT t.* EXCEPT(z))).*,
SUM(z) AS z
FROM `project.dataset.table_produced_by_multiple_joins` t
GROUP BY FORMAT('%t', (SELECT AS STRUCT t.* EXCEPT(z)))
推荐阅读
- google-bigquery - 如何在数据流工作人员上强制安装 google-cloud-bigquery==0.28.0
- c# - put方法上参数的值为null
- ios - swift: CollectionView 单元格大小
- java - 通过迭代集合添加并发性,映射到多个哈希映射并减少到一个
- docker - docker - 有什么方法可以查看所有前面的 Dockerfile?
- scala - 无法解决编译错误
- powershell - 仅将文本附加到 Powershell 函数中的某些变量
- node.js - npm config - 全局与本地
- typescript - TypeORM 中是否有办法将多对多关系的连接表创建为类似于 ActiveRecord 的实体?
- oracle - Oracle 查询性能:VIEW PUSHED PREDICATE 导致内部查询多次执行