У меня есть две таблицы points
и contacts
, и я пытаюсь получить среднее значение points.score
на контакт, сгруппированный ежемесячно. Обратите внимание , что точки и контакты не связаны, я просто хочу, чтобы сумма очков, созданных за месяц, делилась на количество контактов, которые существовали в этом месяце.
Итак, мне нужносумма очков, сгруппированных по месяцу созданного в месяц, и мне нужно считать количество контактов ТОЛЬКО ЗА МЕСЯЦ.Это последняя часть, которая обманывает меня.Я не уверен, как я могу использовать столбец из внешнего запроса в подзапросе.Я попробовал что-то вроде этого:
SELECT SUM(score) AS points_sum,
EXTRACT(month FROM created_at) AS month,
date_trunc('MONTH', created_at) + INTERVAL '1 month' AS next_month,
(SELECT COUNT(id) FROM contacts WHERE contacts.created_at <= next_month) as contact_count
FROM points
GROUP BY month, next_month
ORDER BY month
Итак, я извлекаю фактический месяц, в который мои суммы суммируются, и в то же время получаю начало следующего месяца, чтобы я мог сказать «Получитьme число контактов, в которых они созданы, составляет
Но он жалуется, что column next_month doesn't exist
Это понятно, поскольку подзапрос ничего не знает о внешнем запросе.Квалификация с points.next_month
тоже не работает.
Так может ли кто-нибудь указать мне правильное направление, как этого достичь?
Таблицы:
Очки
score | created_at
10 | "2011-11-15 21:44:00.363423"
11 | "2011-10-15 21:44:00.69667"
12 | "2011-09-15 21:44:00.773289"
13 | "2011-08-15 21:44:00.848838"
14 | "2011-07-15 21:44:00.924152"
Контакты
id | created_at
6 | "2011-07-15 21:43:17.534777"
5 | "2011-08-15 21:43:17.520828"
4 | "2011-09-15 21:43:17.506452"
3 | "2011-10-15 21:43:17.491848"
1 | "2011-11-15 21:42:54.759225"
сумма, месяц и следующий месяц (без подвыбора)
sum | month | next_month
14 | 7 | "2011-08-01 00:00:00"
13 | 8 | "2011-09-01 00:00:00"
12 | 9 | "2011-10-01 00:00:00"
11 | 10 | "2011-11-01 00:00:00"
10 | 11 | "2011-12-01 00:00:00"