Средний запрос Oracle

#sql #oracle #average

#sql #Oracle #средний

Вопрос:

Можно было бы подумать, что это будет просто. Мне просто нужны дата, количество и среднее значение за день для любого временного диапазона. Итак, в приведенном ниже примере мне нужно количество и среднее значение за день за 10-дневный период.

 SELECT date_added, 10 / customer_cnt AS average
FROM (SELECT TRUNC(date_added) AS date_added, 
             ROW_NUMBER() OVER (PARTITION BY TRUNC(date_added) ORDER BY TRUNC(date_added)) AS  rnum,
             COUNT(*) OVER (PARTITION BY TRUNC(date_added)) AS customer_cnt
     FROM payments_log
     WHERE action = 'get_cc_info'
       AND TRUNC(date_added) >= TRUNC(SYSDATE) - 10)
WHERE rnum = 1;
 

Но я не получаю ничего близкого к тому, что я ожидаю.

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

1. Пожалуйста, предоставьте образцы данных и желаемые результаты.

Ответ №1:

Я не знаю, что означает «среднее значение за день». Я думаю, вам просто нужно подсчитать:

 SELECT TRUNC(date_added) AS date_added, 
        COUNT(*) as day_count
FROM payments_log
WHERE action = 'get_cc_info' AND
      date_added >= TRUNC(SYSDATE) - INTERVAL '10' day
GROUP BY TRUNC(date_added);
 

Если вам нужно среднее значение за этот период (т.Е. Одна строка в результирующем наборе), то вам нужно что-то вроде этого:

 SELECT COUNT(*) / 10 as daily_average
       COUNT(*) / COUNT(DISTINCT TRUNC(date_added) daily_average_on_days_with_data
FROM payments_log
WHERE action = 'get_cc_info' AND
      date_added >= TRUNC(SYSDATE) - INTERVAL '10' day;
 

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

1. Не одна строка, а среднее значение за день, основанное на 10 днях……..