【问题标题】:get a distinct count and repeating per row in BigQuery SQL在 BigQuery SQL 中获得不同的计数和每行重复
【发布时间】:2020-09-02 00:16:58
【问题描述】:

我还没有找到答案,但我认为应该可以通过 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 应该是可行的......

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    以下是 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
    ))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多