#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 днях……..