-1

我在 BQ 中有一个如下所示的表:

date          rate 
02/02/22       null
02/01/22       null
01/31/22        1
01/30/22        1.5
01/29/22        0.5

我想创建avg_rate专栏。我尝试了简单的平均值计算,但因为我有一个 group by 语句——它将空值分配给 avg_rate 列。我需要每个比率为空的日期来获取所有不为空的比率总和并除以行数(对于那些比率不为空的)并将这个数字分配给每个日期。这是我的查询:

SELECT
  date,
  SUM(rate) / COUNT(*) AS avg_rate
FROM
  `my_table`
GROUP BY
  1

我得到的输出:

date          avg_rate 
02/02/22       null
02/01/22       null
01/31/22        1
01/30/22        1.5
01/29/22        0.5

期望的输出是:

date          avg_rate 
02/02/22        1
02/01/22        1
01/31/22        1
01/30/22        1.5
01/29/22        0.5
4

2 回答 2

1

您可以使用coalesce返回avg按日期分组,如果它null返回列的总平均值,而不是使用子查询:

select date, coalesce(avg(rate), (select avg(rate) from my_table))
from my_table
group by date
于 2022-02-18T18:33:27.463 回答
-1

假设你有这个:

SELECT *
FROM (
  select 1 as i union select 2 union select null
) x;

这将输出:

一世
1
2
空值

添加了一些聚合函数:

select avg(i), count(i), sum(i), count(*) 
from (
   select 1 as i union select 2 union select null
) x;

输出是:

平均(一) 计数(一) 总和(一) 数数(*)
1.5000 2 3 3
  • 如您所见count(i),计算非空值
  • count(*)计算所有值
于 2022-02-18T16:48:44.400 回答