2015-06-04 111 views
2

我對BigQuery和SQL有點新鮮,因此我遇到的困難可能是我不知道如何描述我有足夠好的問題能夠搜索答案,但我看過,所以請溫柔。結合了兩個多重查詢SELECT FROM語句

我想要做的是計算符合一組標準的唯一用戶標識的總數,並將其除以唯一用戶標識的總數。

例如,計算所有誰擁有購買獨特的用戶:

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

但它不起作用。我知道我在做一些根本性的錯誤,但我不確定它是什麼。我將不勝感激任何幫助。

回答

3

你可以指望的不同用戶是這樣的:

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 
+0

謝謝,這是了不起的。我不確定如何做'1 AS標量事物'。這是極好的。 –

+0

在標量中加入的替代方法是使用CROSS JOIN。 (使用EXACT_COUNT_DISTINCT的積分) –