我在 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
uj5u.com熱心網友回復:
您可以使用coalesce回傳avg按日期分組,如果它null回傳列的總平均值,而不是使用子查詢:
select date, coalesce(avg(rate), (select avg(rate) from my_table))
from my_table
group by date
uj5u.com熱心網友回復:
假設你有這個:
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(*)計算所有值
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/429414.html
上一篇:如何在沒有回圈的情況下獲得2個xyznumpy陣列之間的距離?
下一篇:使用條件將日期列添加到資料框中
