Этот запрос возвращает все строки, которые я определяю как «отзывы». Смотрите скриншот для результатов. Я пытался и до сих пор не смог понять, как суммировать количество строк (каждая из которых является отдельным отзывом) для каждого идентификатора. На скриншоте результатов ниже показан только один идентификатор: 61401. Но в фактических результатах есть и другие идентификаторы ниже. Я хотел бы подсчитать количество строк (отзывов) на уникальный идентификатор. Я продолжаю сталкиваться с совокупными ошибками. Я пробовал подзапросы и «группировать по», но просто не могу понять. Любые идеи, как я могу это сделать? В конечном итоге мне нужны два столбца: id и Rec_Count.
SELECT
prr_u.id,
cprr_r.created_at AS recall_create_date,
prr_m.created_at AS trial_start_date,
prr_m.trial_days AS trial_period_length,
prr_m.created_at + interval '1 day' * trial_period_length AS trial_end_date
FROM my_db.productionrr_users AS prr_u
INNER JOIN my_db.productionrr_memberships AS prr_m
ON prr_u.id = prr_m.id
INNER JOIN my_db.c4productionrr_recalls AS cprr_r
ON cprr_r.user_id = prr_m.id
WHERE recall_create_date BETWEEN trial_start_date AND trial_end_date;
Вот фрагмент результата:
Я хотел бы увидеть результаты, которые выглядят следующим образом (где Recots_count — это просто количество строк, возвращаемых для каждого идентификатора):
Я также попробовал предложение Тана здесь и получил совокупный код ошибки БД = 500310.
SELECT
prr_u.id as id,
cprr_r.created_at AS recall_create_date,
prr_m.created_at AS trial_start_date,
prr_m.trial_days AS trial_period_length,
prr_m.created_at + interval '1 day' * trial_period_length AS trial_end_date,
COUNT(DISTINCT recall_create_date) as recall_count
FROM my_db.productionrr_users AS prr_u
INNER JOIN my_db.productionrr_memberships AS prr_m
ON prr_u.id = prr_m.id
INNER JOIN my_db.c4productionrr_recalls AS cprr_r
ON cprr_r.user_id = prr_m.id
WHERE recall_create_date BETWEEN trial_start_date AND trial_end_date
GROUP BY prr_u.id;
Кроме того, я могу подсчитать общее количество строк в запросе, но я все еще не могу сделать это для каждого идентификатора:
SELECT COUNT(*) FROM (
SELECT prr_u.id, prr_u.email, prr_m.status, cprr_r.created_at AS recall_create_date, prr_m.created_at AS trial_start_date, prr_m.trial_days AS trial_period_length, prr_m.created_at + interval '1 day' * trial_period_length AS trial_end_date, prr_m.expires_at
FROM my_db.productionrr_users AS prr_u
INNER JOIN my_db.productionrr_memberships AS prr_m
ON prr_u.id = prr_m.id
INNER JOIN my_db.c4productionrr_recalls AS cprr_r
ON cprr_r.user_id = prr_m.id
WHERE recall_create_date BETWEEN trial_start_date AND trial_end_date
);
Выход - это общее количество:
@gmb Я не могу обойти эту ошибку агрегатной функции. Я пробовал это, так как не могу запустить ваш код как есть:
SELECT prr_u.id,
prr_m.created_at + interval '1 day' * prr_m.trial_days AS trial_end_date,
COUNT(*) AS recalls_count
FROM my_db.productionrr_users AS prr_u
INNER JOIN my_db.productionrr_memberships AS prr_m
ON prr_u.id = prr_m.id
INNER JOIN my_db.c4productionrr_recalls AS cprr_r
ON cprr_r.user_id = prr_m.id
WHERE cprr_r.created_at BETWEEN prr_m.created_at AND trial_end_date
GROUP BY prr_u.id;
что приводит к следующей совокупной ошибке:
`