google-cloud-platform - 在查询中包括字段,但不是聚合的
问题描述
我在 bigQuery 中有以下查询:
SELECT
project.name,
invoice.month,
service.description,
project.labels, <-- error
(SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
FROM UNNEST(credits) c), 0)) / 1000000)*-1
AS credits,
(SUM(CAST(cost * 1000000 AS int64))
+ SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
FROM UNNEST(credits) c), 0))) / 1000000
AS cost_after_credits
FROM `xxxx`
GROUP BY 1, 2, 3
ORDER BY 1 ASC
;
如果我删除,查询工作正常,project.labels
但我真的需要这些信息。这是我在控制台中看到的错误:SELECT list expression references project.labels which is neither grouped nor aggregated at [5:3]
如果我尝试在 GROUP BY 中包含4
我得到的字段:Grouping by expressions of type ARRAY is not allowed at [14:19]
我知道这是因为该字段是一个record repeated
字段。想知道如何更好地构建我的查询以获取每一行的标签。
解决方案
第一个问题是因为如果未将列添加到 group by 子句,则无法将列添加到 select 语句中,第二个问题是因为您试图按数组进行分组。
为了解决这个问题,您可以使用TO_JSON_STRING,查询将如下所示:
SELECT
project.name,
invoice.month,
service.description,
TO_JSON_STRING(project.labels),
(SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
FROM UNNEST(credits) c), 0)) / 1000000)*-1
AS credits,
(SUM(CAST(cost * 1000000 AS int64))
+ SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
FROM UNNEST(credits) c), 0))) / 1000000
AS cost_after_credits
FROM `xxxx`
GROUP BY 1, 2, 3, TO_JSON_STRING(project.labels)
ORDER BY 1 ASC
;
或者,如果您需要保留标签数组,您可以使用ANY_VALUE
SELECT
project.name,
invoice.month,
service.description,
ANY_VALUE(project.labels),
(SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
FROM UNNEST(credits) c), 0)) / 1000000)*-1
AS credits,
(SUM(CAST(cost * 1000000 AS int64))
+ SUM(IFNULL((SELECT SUM(CAST(c.amount * 1000000 as int64))
FROM UNNEST(credits) c), 0))) / 1000000
AS cost_after_credits
FROM `xxxx`
GROUP BY 1, 2, 3, TO_JSON_STRING(project.labels)
ORDER BY 1 ASC
;
如果您想避免使用 GROUP BY,则需要进行左连接,即查询的左侧和表的右侧(xxxx
在提供的示例中)
推荐阅读
- linux - ssh 端口转发(“ssh -fNL”)无法通过期望 spawn 自动提供密码
- integromat - 如何在自定义 Integromat 应用程序中调试 IML 功能?
- spring-boot - 用于在 Spring Boot JPA 中执行本机 SQL IN 子句查询的 SQLSyntaxErrorException
- centos - OpenLDAP 策略翻译
- javascript - 更改多个字体颜色
- bash - 将 linux 命令移动到 shell 脚本中
- django - ASGI vs WSGI,WSGI 兼容性问题
- pandas - 加入两个数据帧并使用数据帧的索引获取新帧
- zsh - oh-my-zsh:找不到插件“git-remote-branch”
- python - 通过分组使两个数组大小相同