Google bigquery 与地图结构等价的惯用语

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,someKey]

我试图通过someKey分组,然后能够知道每个结果中每个someField值出现的时间

例如:

[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请考虑!对不起,我忘了这件事