Google bigquery 从BigQuery中的时间戳数据类型中获取每月前3个标记数

Google bigquery 从BigQuery中的时间戳数据类型中获取每月前3个标记数,google-bigquery,timestamp,Google Bigquery,Timestamp,我有来自BigQuery的以下数据集:Stackoverflow,TablePost\u问题 我想每月和每年获得前3个标签。该数据集从2008年8月到2020年5月,显示每天随时间变化的时间戳 我最初的方法是对标题进行计数,并按标签年份和月份进行分组,这样我就知道哪些标签的问题最多。然而,这将给我一个长查询结果,其中包含每个月的所有标签和计数(即使标签只有一个问题) 我在网上看到有个东西叫: ROW_NUMBER()(按……顺序……描述划分)作为秩。我尝试应用它,但是,我以前从未使用过它。我对

我有来自BigQuery的以下数据集:Stackoverflow,TablePost\u问题

我想每月和每年获得前3个标签。该数据集从2008年8月到2020年5月,显示每天随时间变化的时间戳

我最初的方法是对标题进行计数,并按标签年份和月份进行分组,这样我就知道哪些标签的问题最多。然而,这将给我一个长查询结果,其中包含每个月的所有标签和计数(即使标签只有一个问题)

我在网上看到有个东西叫:
ROW_NUMBER()(按……顺序……描述划分)作为秩。
我尝试应用它,但是,我以前从未使用过它。我对SQL的世界相当陌生

这就是我到目前为止所做的:

SELECT
  tags,
  COUNT(title) AS number_of_times_used,
  EXTRACT(MONTH FROM creation_date) AS month,
  EXTRACT(YEAR FROM creation_date) AS year,
FROM
  `bigquery-public-data.stackoverflow.posts_questions`
GROUP BY year, month, tags
有没有关于如何达到预期效果的建议?(大概是这样的):


谢谢你的帮助

下面是BigQuery标准SQL

#standardSQL
SELECT top_tags.*
FROM (
  SELECT 
    ARRAY_AGG(t ORDER BY number_of_times_used DESC LIMIT 3) top_tags
  FROM (
    SELECT
      EXTRACT(YEAR FROM creation_date) AS year,
      EXTRACT(MONTH FROM creation_date) AS month,
      tags,
      COUNT(title) AS number_of_times_used
    FROM `bigquery-public-data.stackoverflow.posts_questions`
    GROUP BY year, month, tags
  ) t
  GROUP BY year, month
) t, t.top_tags
-- ORDER BY year DESC, month DESC, number_of_times_used DESC  
结果


下面是BigQuery标准SQL

#standardSQL
SELECT top_tags.*
FROM (
  SELECT 
    ARRAY_AGG(t ORDER BY number_of_times_used DESC LIMIT 3) top_tags
  FROM (
    SELECT
      EXTRACT(YEAR FROM creation_date) AS year,
      EXTRACT(MONTH FROM creation_date) AS month,
      tags,
      COUNT(title) AS number_of_times_used
    FROM `bigquery-public-data.stackoverflow.posts_questions`
    GROUP BY year, month, tags
  ) t
  GROUP BY year, month
) t, t.top_tags
-- ORDER BY year DESC, month DESC, number_of_times_used DESC  
结果

“如预期的那样,考虑接受答案:O”所以,考虑接受答案