sql - 结合两个多个 bigquery SELECT FROM 语句

标签 sql google-bigquery

我对 BigQuery 和 SQL 比较陌生,所以我遇到的部分困难可能是我不知道如何描述我遇到的问题,以便能够搜索到答案,但我看过所以请温柔点。

我想做的是计算满足一组条件的唯一用户 ID 的总数,并将其除以唯一用户 ID 的总数。

例如统计所有购买过的唯一用户:

SELECT count(userId) 
FROM (SELECT userId 
FROM (FLATTEN([table1], user_attribute)) 
WHERE event_value > 0 and event_parameters.Name = "SKU" 
GROUP BY userId ORDER BY userId)

并统计独立用户总数

 SELECT count(userId) 
 FROM (SELECT userId 
 FROM (FLATTEN([table1], user_attribute)) 
 GROUP BY userId ORDER BY userId)

我试着把查询写成

SELECT buyers/total 
    FROM (SELECT COUNT(userId) AS buyers 
    FROM (SELECT userId 
    FROM (FLATTEN([table1], user_attribute)) 
    WHERE event_value > 0 and event_parameters.Name = "SKU" 
    GROUP BY userId ORDER BY userId), 
COUNT(userId) as total
    FROM (SELECT userId 
    FROM (FLATTEN([table1], user_attribute)) 
    GROUP BY userId ORDER BY userId))

但它不起作用。我知道我做的事情从根本上是错误的,但我不确定它是什么。如果有任何帮助,我将不胜感激。

最佳答案

您可以像这样计算不同的用户:

SELECT
  EXACT_COUNT_DISTINCT(userId) as buyers
FROM (FLATTEN([table1], user_attribute))
WHERE
  event_value > 0
  AND event_parameters.Name = "SKU"

连接它们的一种方法是添加一个静态标量值并将其用于连接:

SELECT
  buyers/total
FROM (
  SELECT
    EXACT_COUNT_DISTINCT(userId) AS buyers,
    1 AS scalar,
  FROM (FLATTEN([table1], user_attribute))
  WHERE
    event_value > 0
    AND event_parameters.Name = "SKU") a
JOIN (
  SELECT
    COUNT(userId) AS total,
    1 AS scalar,
  FROM (FLATTEN([table1], user_attribute)) ) b
ON
  a.scalar=b.scalar

关于sql - 结合两个多个 bigquery SELECT FROM 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30651161/

相关文章:

mysql - SQL 错误 : 1064 Hibernate

mysql - 年末按weekofyear MySQL分组

batch-processing - BigQuery - 从 UI 提交时相同的查询有效,并从批处理报告 SQL 语法错误

google-bigquery - 无法运行查询 : project does not have the reservation in the data region

sql - 获取 BigQuery 中每个 ID 的最新行的可扩展解决方案

sql - Excel 2010 中的 PowerView

sql - 哪些索引有助于加快查询速度?

python - 如何将 df 中的所有 NaT 和 nan 替换为 None

google-bigquery - 如何将重复的字段流式传输到 bigquery 中?

google-cloud-platform - Google BigQuery 对 Avro 逻辑类型的支持