将两个多个BigQuery SELECT FROM语句组合在一起

3

我对BigQuery和SQL比较新,所以我遇到的困难可能是因为我不知道如何充分描述我的问题,以便能够搜索答案,但我已经尽力了,请温柔一点。

我想做的是计算符合一组条件的唯一userId总数,并将其除以唯一userId的总数。

例如,要计算所有具有购买记录的唯一用户:

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))

但它无法工作。我知道我做错了一些根本性的事情,但我不确定是什么。希望能得到任何帮助。

1个回答

6
您可以这样计算不同的用户数量:
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

谢谢,太棒了。我不确定如何做“1 AS scalar”的事情。那太好了。 - Brad Davis
在标量中,与JOIN相对应的替代方法是使用CROSS JOIN。(如果使用EXACT_COUNT_DISTINCT则加分) - Jordan Tigani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接