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