2017-05-11 130 views
1

我使用导入的GA数据计算页面上的平均产品位置,目前我正在通过SKU对项目位置进行平均 - 是否有一种方法可以在我的查询中将其计算为加权平均值作为一个产品可能会显示在第1位10次,一次在第10位,我不想平均为5。BigQuery中的加权平均值

这里是我的查询到目前为止:

SELECT hits.product.productSKU AS SKU, AVG(hits.product.productListPosition) AS Average_Position 
FROM (TABLE_DATE_RANGE([***.ga_sessions_], TIMESTAMP('2016-04-24'), TIMESTAMP('2016-04-30'))) 
GROUP BY SKU 
ORDER BY Average_Position ASC 

回答

1

我测试了这个查询和它在这里工作:

SELECT 
    sku, 
    nom/den avg_position from(
    SELECT 
    sku, 
    SUM(position * freq) nom, 
    SUM(freq) den from(
    SELECT 
     prods.productsku sku, 
     prods.productlistposition position, 
     COUNT(prods.productlistposition) freq 
    FROM 
     `project_id.dataset_id.ga_sessions_*`, 
     UNNEST(hits) AS hits, 
     UNNEST(hits.product) prods 
    WHERE 
     1 = 1 
     AND PARSE_TIMESTAMP('%Y%m%d', REGEXP_EXTRACT(_table_suffix, r'.*_(.*)')) BETWEEN TIMESTAMP('2016-04-24') AND TIMESTAMP('2016-04-30') 
     AND prods.productlistposition > 0 
    GROUP BY 
     sku, 
     position) 
    GROUP BY 
    sku) 

请注意,我使用的是BigQuery的Standard版本,因为这是强烈推荐的。

如果您必须使用Legacy版本,那么调整此查询可能很容易(假设您不必使用FLATTEN操作)。

你说你要考虑一个特定网页上的位置,这可以通过第一where子句中插入条件

and hits.page.pagepath = 'your page url' 
完成以及