【问题标题】:Query for top trending things in bigquery?在 bigquery 中查询热门事物?
【发布时间】:2019-02-26 08:06:27
【问题描述】:

我有多个地点的每日收入数据。这是一个例子:

+---------+------------+----------+------------+
|    ID   |  location  |  value   | timestamp  |
+---------+------------+----------+------------+
| 1       | LA         |  15.000  | 2019-02-12 |
| 2       | SF         |  23.000  | 2019-02-10 |
| 3       | NYC        |  9.000   | 2019-02-10 |
| 4       | LA         |  2.500   | 2019-02-09 |
+---------+------------+----------+------------+

我想找到前三个热门地点。输出应该是这样的:

+----------+------------+----------+----------------+
|   rank   |  location  |  growth  | growth_percent |
+----------+------------+----------+----------------+
| 1        | SF         |  23.000  | 0.75           |
| 2        | LA         |  17.500  | 0.62           |
| 3        | NYC        |  9.000   | 0.43           |
+----------+------------+----------+----------------+

我认为使用RANK() 函数可以解决这个问题。我开始了:

SELECT location, 
  RANK() OVER (PARTITION BY location ORDER BY timestamp) as rank
FROM `revenues`
GROUP BY location, timestamp

但这会多次返回一个位置。关于如何创建这样的趋势查询有什么想法吗?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    试试这个:

    WITH `data` AS(
      SELECT 1 AS ID, 'LA' AS location, 15000 AS value, '2019-02-12' AS timestamp UNION ALL
      SELECT 2 AS ID, 'SF' AS location, 23000 AS value, '2019-02-10' AS timestamp UNION ALL
      SELECT 3 AS ID, 'NYC' AS location, 9000 AS value, '2019-02-10' AS timestamp UNION ALL
      SELECT 4 AS ID, 'LA' AS location, 2500 AS value, '2019-02-09' AS timestamp
    )
    
    SELECT
      RANK() OVER (ORDER BY SUM(value) DESC) AS rank,
      location,
      SUM(value) AS growth
    FROM `data`
    GROUP BY
      location
    

    结果:

    [
      {
        "rank": "1",
        "location": "SF",
        "growth": "23000"
      },
      {
        "rank": "2",
        "location": "LA",
        "growth": "17500"
      },
      {
        "rank": "3",
        "location": "NYC",
        "growth": "9000"
      }
    ]
    

    通过对位置进行分组,您可以删除查询中观察到的重复项。

    【讨论】:

    • 谢谢威廉!如何在结果中包含时间戳以使结果可按时间过滤?
    • 由于存在聚合步骤,因此还必须将某些函数应用于时间戳,以便获得一个代表值,例如应用 maxmin
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 2013-05-24
    • 2013-10-09
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多