创建将参数显示为列的查询-BigQuery

时间:2019-01-28 15:39:18

标签: sql firebase google-bigquery

我正在使用Firebase和BigQuery。 我想做的是创建查询,该查询向我显示“订单”的平均数量,以及每个“级别”的“ SoftCurrency”,但我不知道该怎么做。

这是数据库中示例事件的简化JSON文件。每当玩家到达下一个级别时,都会发送此类事件。

[
  {
    "event_name": "LevelUp",
    "event_params": [
      {
        "key": "Level",
        "value": {
          "string_value": null,
          "int_value": "12"
        }
      },
      {
        "key": "SoftCurrrency",
        "value": {
          "string_value": null,
          "int_value": "623"
        }
      },
      {
        "key": "Orders",
        "value": {
          "string_value": null,
          "int_value": "24"
        }
      }
    ]
  }
]

1 个答案:

答案 0 :(得分:0)

那是我的做法:

SELECT ANY_VALUE(Level) as Lvl, FLOOR(AVG(SoftCurrency)) as average_Coins, FLOOR(AVG(Orders)) as average_Orders
FROM  (
  SELECT MAX(if(param.key = "SoftCurrency", param.value.int_value, NULL)) AS SoftCurrency,
    MAX(if(param.key = "Level", param.value.int_value, NULL)) AS Level,
    MAX(if(param.key = "Orders", param.value.int_value, NULL)) AS Orders
  FROM (
    SELECT user_pseudo_id, event_timestamp, param
    FROM `analytics`,
    UNNEST(event_params) AS param
    WHERE event_name = "LevelUp"
    AND (param.key = "SoftCurrency" OR param.key = "Level" OR param.key = "Orders")
  )
  GROUP BY user_pseudo_id, event_timestamp
) 
GROUP BY Level
ORDER BY Lvl