Google bigquery 与地图结构等价的惯用语
我的分析需要聚合行,并存储所有行中某个字段出现的不同值的数量 样本数据结构 [someField,someKey] 我试图通过someKey分组,然后能够知道每个结果中每个someField值出现的时间 例如:Google bigquery 与地图结构等价的惯用语,google-bigquery,Google Bigquery,我的分析需要聚合行,并存储所有行中某个字段出现的不同值的数量 样本数据结构 [someField,someKey] 我试图通过someKey分组,然后能够知道每个结果中每个someField值出现的时间 例如: [someField: a, someKey: 1], [someField: a, someKey: 1], [someField: b, someKey: 1], [someField: c, someKey: 2], [someField: d, someKey: 2] 我希望达
[someField: a, someKey: 1],
[someField: a, someKey: 1],
[someField: b, someKey: 1],
[someField: c, someKey: 2],
[someField: d, someKey: 2]
我希望达到的目标是:
[someKey: 1, fields: {a: 2, b: 1}],
[someKey: 2, fields: {c: 1, d: 1}],
可能有一种更聪明的方法可以做到这一点,并以您想要的格式获取它,例如,在第二列中使用数组,但这对您来说已经足够了:
with sample as (
select 'a' as someField, 1 as someKey UNION all
select 'a' as someField, 1 as someKey UNION ALL
select 'b' as someField, 1 as someKey UNION ALL
select 'c' as someField, 2 as someKey UNION ALL
select 'd' as someField, 2 as someKey)
SELECT
someKey,
SUM(IF(someField = 'a', 1, 0)) AS a,
SUM(IF(someField = 'b', 1, 0)) AS b,
SUM(IF(someField = 'c', 1, 0)) AS c,
SUM(IF(someField = 'd', 1, 0)) AS d
FROM
sample
GROUP BY
someKey order by somekey asc
结果:
someKey a b c d
---------------------
1 2 1 0 0
2 0 0 1 1
这是BigQuery中使用得很好的技术,请参见。可能有一种更聪明的方法可以做到这一点,并以您想要的格式获取它,例如,对第二列使用数组,但这对您来说已经足够了:
with sample as (
select 'a' as someField, 1 as someKey UNION all
select 'a' as someField, 1 as someKey UNION ALL
select 'b' as someField, 1 as someKey UNION ALL
select 'c' as someField, 2 as someKey UNION ALL
select 'd' as someField, 2 as someKey)
SELECT
someKey,
SUM(IF(someField = 'a', 1, 0)) AS a,
SUM(IF(someField = 'b', 1, 0)) AS b,
SUM(IF(someField = 'c', 1, 0)) AS c,
SUM(IF(someField = 'd', 1, 0)) AS d
FROM
sample
GROUP BY
someKey order by somekey asc
结果:
someKey a b c d
---------------------
1 2 1 0 0
2 0 0 1 1
这是BigQuery中使用得很好的技术,请参见。它对您有用吗
WITH data AS (
select 'a' someField, 1 someKey UNION all
select 'a', 1 UNION ALL
select 'b', 1 UNION ALL
select 'c', 2 UNION ALL
select 'd', 2)
SELECT
someKey,
ARRAY_AGG(STRUCT(someField, freq)) fields
FROM(
SELECT
someField,
someKey,
COUNT(someField) freq
FROM data
GROUP BY 1, 2
)
GROUP BY 1
结果:
someKey a b c d
---------------------
1 2 1 0 0
2 0 0 1 1
它不会给出确切的结果,但它可能会收到与您以前的结果相同的查询。正如您所说,对于每个键,您可以检索column freq someField发生的次数
我一直在寻找一种聚合结构的方法,但没有找到。但是以结构数组的形式检索结果非常简单。这对您有用吗
WITH data AS (
select 'a' someField, 1 someKey UNION all
select 'a', 1 UNION ALL
select 'b', 1 UNION ALL
select 'c', 2 UNION ALL
select 'd', 2)
SELECT
someKey,
ARRAY_AGG(STRUCT(someField, freq)) fields
FROM(
SELECT
someField,
someKey,
COUNT(someField) freq
FROM data
GROUP BY 1, 2
)
GROUP BY 1
结果:
someKey a b c d
---------------------
1 2 1 0 0
2 0 0 1 1
它不会给出确切的结果,但它可能会收到与您以前的结果相同的查询。正如您所说,对于每个键,您可以检索column freq someField发生的次数
我一直在寻找一种聚合结构的方法,但没有找到。但是以结构数组的形式检索结果非常简单
我试图通过someKey分组,然后能够知道每个结果中每个someField值出现的时间
标准SQL
选择
某个关键人物,
萨默菲尔德,
计数域频率
从你的桌子上
分组1,2
-按某个键、某个字段排序
我希望达到的目标是:
[someKey:1,字段:{a:2,b:1}],
[someKey:2,字段:{c:1,d:1}]
这与您用文字表达的内容不同-这称为旋转,根据您的评论-a、b、c和d键可能是无限的-很可能不是您需要的。同时,如果您有一些有限数量的字段值,并且可以找到大量相关的文章,那么数据透视也很容易实现 我试图通过someKey分组,然后能够知道每个结果中每个someField值出现的时间 标准SQL 选择 某个关键人物, 萨默菲尔德, 计数域频率 从你的桌子上 分组1,2 -按某个键、某个字段排序 我希望达到的目标是: [someKey:1,字段:{a:2,b:1}], [someKey:2,字段:{c:1,d:1}]
这与您用文字表达的内容不同-这称为旋转,根据您的评论-a、b、c和d键可能是无限的-很可能不是您需要的。同时,如果你有一些有限数量的字段值,并且你可以找到大量相关的帖子,那么数据透视也很容易实现a、b、c和d键在一开始可能是无限的和未知的,我可以假设字段名未知的键仍然可以。首先运行查询以生成SQL。请看这里->a、b、c和d键在开始时可能是无限的和未知的,我可以假设字段名未知键仍然可能存在。首先运行查询以生成SQL。请参见此处->重要提示-您可以使用投票下方张贴答案左侧的勾号标记接受答案。看看为什么它很重要!同样重要的是对答案进行投票。投票选出有帮助的答案。。。当有人回答你的问题时,你可以检查一下该做什么。遵循这些简单的规则,你可以提高自己的声望得分,同时让我们有动力去回答你的问题:O请考虑!很抱歉,我忘记了这个重要的问题,所以-你可以使用投票下方张贴答案左侧的勾号来标记接受答案。看看为什么它很重要!同样重要的是对答案进行投票。投票选出有帮助的答案。。。当有人回答你的问题时,你可以检查一下该做什么。遵循这些简单的规则,你可以提高自己的声望得分,同时让我们有动力去回答你的问题:O请考虑!对不起,我忘了这件事