Как объединить арифметическую сумму с аналитической функцией в SQL для выполнения

#sql #analytic-functions

#sql #аналитические функции

Вопрос:

Я пытаюсь вычислить текущий% по результату двух подсчетов (как показано в приведенном ниже отрывке SQL) из таблицы в обычном SQL, которая выглядит следующим образом:

Табличная база данных

Мои мысли таковы:

     SELECT week(beginning),
(select count(enquired_at) from TABLE) / (select count(*) from TABLE) * 100 OVER (partition by beginning order by beginning desc)
 

Я хотел бы получить результирующий набор, который выглядит следующим образом:

Набор результатов

Как бы человек взял это арифметическое вычисление и сделал так, чтобы оно вычислялось кумулятивно с 1-й недели начала и далее?

Спасибо!

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

1. Ваше описание неясно. Пожалуйста, покажите результаты, которые вы хотите, и объясните логику явно («результат двух подсчетов» является неопределенным). Также отметьте используемую вами базу данных.

2. Спасибо, Гордон — я отредактировал свой пост, чтобы попытаться уточнить.

Ответ №1:

Основываясь на вашем запросе, вы, похоже, хотите, чтобы количество раз, когда выполняется подсчет enquired_at , не было нулевым. Если это так:

 select t.*,
       ( count(enquired_at) over (order by beginning) * 1.0 /
         count(*) over (order by beginning)
       ) as ratio
from t;
 

Или проще как:

 select t.*,
       avg(case when enquired_at is not null then 1.0 else 0 end) over (order by beginning) as ratio
from t
 

Редактировать:

Вы можете поместить это в запрос агрегации:

 select week(beginning), 
       ( sum(count(enquired_at)) over (order by min(beginning)) * 1.0 /
         sum(count(*)) over (order by min(beginning))
       ) as ratio
from t
group by week(beginning);