Sql 计算每个相关值在每个季度的平均值

Sql 计算每个相关值在每个季度的平均值,sql,google-bigquery,Sql,Google Bigquery,我在BigQuery中有一个查询。我想知道一个季度的平均值。在我当前的SQL中,id1的Q1期间的值与id2的值相同 这就是我所拥有的,价值观很好: row|averages|quarter|identifier ----------------------------- 1 | 10 | 1 | id1 2 | 20 | 2 | id1 3 | 30 | 1 | id2 4 | 40 | 2 | id2 下面是我为上述结

我在BigQuery中有一个查询。我想知道一个季度的平均值。在我当前的SQL中,
id1
的Q1期间的值与
id2
的值相同

这就是我所拥有的,价值观很好:

row|averages|quarter|identifier
-----------------------------
1  | 10     | 1     | id1
2  | 20     | 2     | id1
3  | 30     | 1     | id2
4  | 40     | 2     | id2
下面是我为上述结构编写的SQL,它提供了很好的值:

WITH
  index_cal AS (
  SELECT
    values-01,
    kind,
    EXTRACT (QUARTER  FROM  date) as QUARTER,
    date,
  FROM
    `project.dataset.table`,
  geom AS (
  SELECT
    identifier
  FROM
    `project.dataset.table2` )
SELECT
   AVG(values-01) AS averages,
    QUARTER AS quarter,
    geom. identifier as identifier
  FROM
    index_cal as g
INNER JOIN
  geom
ON
  INTERSECTS(g.kind,
    geom. identifier)
GROUP BY
  identifier
  quarter
我想对每个标识符的每个季度的值进行分组,这样每个标识符只有一个关联行:

row | averages | quarter | identifier
----------------------------------
1   | 10       | 1       | id1
    | 20       | 2       |
----------------------------------
2   | 30       | 1       | id2
    | 40       | 2       |
----------------------------------
为了获得所需的结构,以便id1只有1个关联行,同样,对于所有标识符,我编写了以下SQL查询:

WITH
  index_cal AS (
  SELECT
    values-01,
    kind,
    EXTRACT (QUARTER  FROM  date) as QUARTER,
    date,
  FROM
    `project.dataset.table`,
  geom AS (
  SELECT
    identifier
  FROM
    `project.dataset.table2` )
SELECT
  ARRAY(
  SELECT
    AS STRUCT AVG(values-01) AS averages,
    QUARTER AS quarter
  FROM
    index_cal
  GROUP BY
    QUARTER ) as INDEX,
  geom. identifier as identifier
FROM
  index_cal AS g
INNER JOIN
  geom
ON
  INTERSECTS(g.kind,
    geom. identifier)
GROUP BY
  identifier
在运行此查询时,我将获得按季度分组的所有标识符的平均值,以便对所有标识符重复值(本例中为15和25):

row | averages | quarter | identifier
----------------------------------
1   | 15       | 1       | id1
    | 25       | 2       |
----------------------------------
2   | 15       | 1       | id2
    | 25       | 2       |
----------------------------------
2   | 15       | 1       | id3
    | 25       | 2       |
----------------------------------

最后,我想回答的是基于
标识符
的每季度
值-01
的平均值。目前,它们对于
标识符的任何值都是相同的

在提供原始值的原始查询上使用ARRAY_AGG解决了该问题

with final_cal as (WITH
  index_cal AS (
  SELECT
    values-01,
    kind,
    EXTRACT (QUARTER  FROM  date) as QUARTER,
    date,
  FROM
    `project.dataset.table`,
  geom AS (
  SELECT
    identifier
  FROM
    `project.dataset.table2` )
SELECT
   AVG(values-01) AS averages,
    QUARTER AS quarter,
    geom. identifier as identifier
  FROM
    index_cal as g
INNER JOIN
  geom
ON
  INTERSECTS(g.kind,
    geom. identifier)
GROUP BY
  identifier
  quarter)
SELECT identifier, ARRAY_AGG(STRUCT(averages, quarter)) from final_cal GROUP BY identifier

嗨,普拉内。我仍在努力理解这个问题。有没有办法简化一下?嗨,菲利佩,编辑了我的问题。如果需要,我可以提供更多细节。