如何在 BigQuery 中编写条件 string_agg 函数?

How can I write a conditional string_agg function in BigQuery?

我编写了一个查询来查看用户浏览我网站的旅程,使用 string_agg() 函数和 hits.contentGroup.contentGroup1 按顺序将产品页面、建议页面、新闻页面等组合在一起顺序,使用命中数对它们进行排序,只查看 'PAGE' 命中类型。

但是,注册页面的分组方式不同,因此如果用户已注册,这会导致 '(not set)' 值出现在查询输出 table 的整个用户旅程中一个帐户。

有没有办法给string_agg函数应用条件,这样如果内容组是'not set',就可以查看对应的页面路径,如果页面路径匹配LIKE '%join/complete%' 例如 return 'Join Complete''not set'?

以外的结果

这是我最好的尝试,但它只是 return 包含 join/complete 的结果,而不是用户旅程的其余部分。

    SELECT
      date,
      fullVisitorId,
      visitId,
      STRING_AGG(
      CASE 
        WHEN hit.contentGroup.contentGroup1 = '(not set)' THEN 
        CASE 
          WHEN hit.page.pagePath LIKE '%join/complete%' THEN 'join_complete' 
          ELSE hit.contentGroup.contentGroup1 
        END 
      END
      , '#' ORDER BY hit.hitNumber)
    FROM `xxxxx-ga-datasets.xxxx.ga_sessions_*` AS t, 
    UNNEST(hits) AS hit
    WHERE
      _TABLE_SUFFIX BETWEEN '20190101' AND '20190101'
      AND hit.type='PAGE'
    GROUP BY 1, 2, 3
    ORDER BY 1, 2

感谢任何建议!干杯。

因为如果内容组不是 not set,您的案例构建 returns NULL。您可以将其简化为

    SELECT
      date,
      fullVisitorId,
      visitId,
      STRING_AGG(
      CASE 
        WHEN hit.page.pagePath LIKE '%join/complete%' THEN 'join_complete' 
        ELSE hit.contentGroup.contentGroup1  
      END
      , '#' ORDER BY hit.hitNumber)
    FROM `xxxxx-ga-datasets.xxxx.ga_sessions_*` AS t, 
    UNNEST(hits) AS hit
    WHERE
      _TABLE_SUFFIX BETWEEN '20190101' AND '20190101'
      AND hit.type='PAGE'
    GROUP BY 1, 2, 3
    ORDER BY 1, 2