簡體   English   中英

Presto SQL - 用0填充范圍內的缺失值

[英]Presto SQL - Fill in missing values within range with 0

這是初始表:

id range val
1  -4.   2
1  -2.   1
1. 1.    1
1  3.    2
1  4.    1
2. -1.   1
2. 0.    1
2. 1.    1

更新表:

id range val
1  -4.   2
1. -3.   0
1  -2.   1
1. -1.   0
1. 0.    0
1. 1.    1
1. 2.    0
1  3.    2
1  4.    1
2. -1.   1
2. 0.    1
2. 1.    1
2. 2.    0
2  3.    0
2  4.    0

期望的邏輯:

  • 每個id都會有一些范圍。
  • 對於每個id ,范圍的下限將不同,但上限將是整個表中的最大值。
  • 對於該 id 更新范圍內的任何缺失值,它將被歸為 0

我不是 SQL wiz,所以我有點迷路了。 任何幫助將非常感激。 讓我知道是否對邏輯感到困惑。

如果對於每個范圍值,您至少有一個值,那么我認為您想要:

select i.id, t.range, coalesce(t.value, 0) as value
from (select distinct id from t) i cross join
     (select distinct range from t where range > 0) r left join
     t
     on t.id = i.id and t.range = r.range
union all
select id, range, value
from t
where range <= 0;

這是如何運作的? 第一個子查詢生成 id 和范圍值的所有組合,其中范圍值大於 0。它使用不同idrange值的笛卡爾積來執行此操作。

然后LEFT JOIN會引入現有數據。 最后的子查詢帶來了碎屑——小於 0 的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM