Как преобразовать стандартный SQL-скрипт BigQuery в PostgreSQL?

#sql #postgresql

#sql #postgresql

Вопрос:

У меня есть скрипт BigQuery для построения геометрической прогрессии от минимального термина к максимальному значению, используя dense as ratio. Он работает в BigQuery очень хорошо, но я хочу использовать его в PostgreSQL.

 WITH calc as (SELECT 0.02 as min_cpm, 9.8 as max_cpm, 1.6 as dense)      
SELECT min_cpm, max_cpm, dense, stage   1 stage, 
IF (MOD(CAST(FLOOR(min_cpm * POWER(dense, stage)*1000) AS INT64),10)= 0, (CAST(FLOOR(min_cpm * POWER(dense, stage)*1000) AS INT64) 1 )/1000, CAST(FLOOR(min_cpm * POWER(dense, stage)*1000) AS INT64)/1000) as cpm,     
FROM calc,
UNNEST(GENERATE_ARRAY(0, CAST(FLOOR(LOG(max_cpm/min_cpm) / LOG(dense)) AS INT64))) stage
  

Этот скрипт округляет каждое cpm значение до трех символов после точки. И делает последний символ не равным 0 .

Итак, ожидаемый результат:

введите описание изображения здесь

Возможно ли сделать это в PostgereSQL? Есть предложения.

Спасибо!

Ответ №1:

Это очень сложно. Но что-то вроде этого:

 with calc as (
      SELECT 0.02 as min_cpm, 9.8 as max_cpm, 1.6 as dense
     )      
select calc.*, stage   1,
       FLOOR(min_cpm * POWER(dense, stage)*1000) / 1000
from calc cross join
     generate_series(0, ceiling(LOG(max_cpm/min_cpm) / LOG(dense)), 1) stage ;
  

Комментарии:

1. Я хочу, чтобы последний термин был меньше максимального значения cpm. Как его изменить?

2. @Timogavk . . . Вычтите 1 из второго аргумента в generate_series() (хотя floor() также может делать то, что вы хотите).