Google bigquery 获取BigQuery SQL中每行的不同计数和重复次数

Google bigquery 获取BigQuery SQL中每行的不同计数和重复次数,google-bigquery,Google Bigquery,我还没有找到这个问题的答案,但我认为用BigQuery只需一个查询就可以做到这一点——我正在寻找与此相近的东西,即使有近似的结果 假设我有一个类似这样的表,其中有一列名为myValue ==== myValue ==== foo | bar | bar | baz | 我希望能够有一个单独的查询,在它旁边的一列中,每一行都有不同的myValue计数 =======|=====================| myValue|myNewCounts | =======

我还没有找到这个问题的答案,但我认为用BigQuery只需一个查询就可以做到这一点——我正在寻找与此相近的东西,即使有近似的结果

假设我有一个类似这样的表,其中有一列名为myValue

====
myValue
====
foo  |
bar  |
bar  |
baz  |
我希望能够有一个单独的查询,在它旁边的一列中,每一行都有不同的myValue计数

=======|=====================|
myValue|myNewCounts          |
=======|=====================|
foo    |[foo:1, bar:2, baz:1]
bar    |[foo:1, bar:2, baz:1]
bar    |[foo:1, bar:2, baz:1]
baz    |[foo:1, bar:2, baz:1]
我知道可以使用ARRAY_AGG(distinct)来获取每一行上的不同值,但我还没有找到一种方法来获取每一行上的计数,即使是以近似的方式

在一个查询中完成这项工作很重要-我可以使用一个单独的查询来计算不同的计数,然后将其连接回这个表,但我尝试在一个查询中完成这项工作


有人会认为——在一个列数据库中——一次返回myValue和myNewCounts应该是可行的……

下面是BigQuery标准SQL

#standardSQL
SELECT * FROM `project.dataset.table`, (
SELECT '[' || STRING_AGG(x, ', ') || ']' myNewCounts FROM (
  SELECT FORMAT('%s:%i', myValue, COUNT(1)) x
  FROM `project.dataset.table`
  GROUP BY myValue
))   
如果要应用于问题中的样本数据,如下例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'foo' myValue UNION ALL
  SELECT 'bar' UNION ALL
  SELECT 'bar' UNION ALL
  SELECT 'baz' 
)
SELECT * FROM `project.dataset.table`, (
SELECT '[' || STRING_AGG(x, ', ') || ']' myNewCounts FROM (
  SELECT FORMAT('%s:%i', myValue, COUNT(1)) x
  FROM `project.dataset.table`
  GROUP BY myValue
))   
结果是

Row myValue myNewCounts  
1   foo     [foo:1, bar:2, baz:1]    
2   bar     [foo:1, bar:2, baz:1]    
3   bar     [foo:1, bar:2, baz:1]    
4   baz     [foo:1, bar:2, baz:1]    
如果myNewCounts预期是一个数组,请使用下面的版本

#standardSQL
SELECT * FROM `project.dataset.table`, (
SELECT ARRAY_AGG(x) myNewCounts FROM (
  SELECT FORMAT('%s:%i', myValue, COUNT(1)) x
  FROM `project.dataset.table`
  GROUP BY myValue
))

下面是BigQuery标准SQL

#standardSQL
SELECT * FROM `project.dataset.table`, (
SELECT '[' || STRING_AGG(x, ', ') || ']' myNewCounts FROM (
  SELECT FORMAT('%s:%i', myValue, COUNT(1)) x
  FROM `project.dataset.table`
  GROUP BY myValue
))   
如果要应用于问题中的样本数据,如下例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'foo' myValue UNION ALL
  SELECT 'bar' UNION ALL
  SELECT 'bar' UNION ALL
  SELECT 'baz' 
)
SELECT * FROM `project.dataset.table`, (
SELECT '[' || STRING_AGG(x, ', ') || ']' myNewCounts FROM (
  SELECT FORMAT('%s:%i', myValue, COUNT(1)) x
  FROM `project.dataset.table`
  GROUP BY myValue
))   
结果是

Row myValue myNewCounts  
1   foo     [foo:1, bar:2, baz:1]    
2   bar     [foo:1, bar:2, baz:1]    
3   bar     [foo:1, bar:2, baz:1]    
4   baz     [foo:1, bar:2, baz:1]    
如果myNewCounts预期是一个数组,请使用下面的版本

#standardSQL
SELECT * FROM `project.dataset.table`, (
SELECT ARRAY_AGG(x) myNewCounts FROM (
  SELECT FORMAT('%s:%i', myValue, COUNT(1)) x
  FROM `project.dataset.table`
  GROUP BY myValue
))