Join таблицы сама на себя вместе с каунтом по условию
Надо считать сколько постов сделал юзер сегодня, за неделю (подзапросов таких будет еще несколько с разными условиями) и общее количество.
Но у меня подзапрос выдает не одну колонку которая привязывается к конкретному юзеру как допустим результат сгруппированый за один день а по всем юзерам.
Понимаю что топчусь где то рядом но никак не пойму в чем ошибка.
select `user_id`,
count(*) as total,
(select count(*) as total_today
from `posts` as `today_posts`
join `posts` on `today_posts`.`id` = `posts`.`id`
where `today_posts`.`created_at` between '2023-06-16 00:00:00' and '2023-06-16 23:59:59'
group by `today_posts`.`user_id`) as `total_today`
from `posts` as postsMain
group by `postsMain`.user_id
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
Обычная условная агрегация.
SELECT `user_id`,
COUNT(*) AS total,
SUM(created_at BETWEEN '2023-06-16 00:00:00' AND '2023-06-16 23:59:59') AS `total_today`,
SUM(created_at BETWEEN '2023-06-10 00:00:00' AND '2023-06-16 23:59:59') AS `total_last_week`
-- если надо - добавить поля с другими условиями отбора
FROM `posts`
GROUP BY user_id