如何使用带窗口函数和case-when语句的除法

njthzxwz  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(704)

它与sum()一起工作,但不与sum()/sum()一起工作
使用sum():

  1. select *,
  2. case when time_of_day_viewers_time_zone >= '06:00:00 -
  3. 06:59:59' and time_of_day_viewers_time_zone <= '10:00:00 - 10:59:59'
  4. then sum(amount_spent_usd) over () else null end as cpm
  5. from t1

不使用sum()/sum():

  1. select *,
  2. case when time_of_day_viewers_time_zone >= '06:00:00 - 06:59:59'
  3. and time_of_day_viewers_time_zone <= '10:00:00 - 10:59:59'
  4. then sum(amount_spent_usd)/sum(impressions)*1000
  5. over () else null end as cpm
  6. from t1

edit1:即使我使用sum(amount\u spend\u usd)/nullif(sum(impressions),0)*1000,它仍然说“语法错误在或接近“over””
编辑2:

  1. sum(amount_spent_usd) over () / (sum(impressions) over () * 1000)

如果我使用这个查询,它对所有24小时进行求和,这意味着不应用case when语句。如何解决这个问题?
edit4:最后我使用了这个查询,尽管它很长。。

  1. (sum(case when time_of_day_viewers_time_zone >= '06:00:00 - 06:59:59'
  2. and time_of_day_viewers_time_zone <= '10:00:00 - 10:59:59'
  3. then amount_spent_usd else null end) over () /sum(case when time_of_day_viewers_time_zone >= '06:00:00 - 06:59:59'
  4. and time_of_day_viewers_time_zone <= '10:00:00 - 10:59:59'
  5. then impressions else null end) over ())*1000 as new

提前谢谢

9jyewag0

9jyewag01#

你不能使用 over() 对于两个窗口函数,需要分别为每个函数提供windowing子句。乘法需要在整个表达式上进行:

  1. sum(amount_spent_usd) over () / (sum(impressions) over () * 1000)

相关问题