Если строго по условиям, то так:
SELECT
u.name, (SELECT COUNT(*) FROM stat s WHERE s.id_user = u.id)
FROM users u
WHERE u.date BETWEEN :dt1 AND :dt2
Так вы посчитаете статьи только тех пользователей у которых они есть и удобно добавлять условия на сами статьи:
SELECT u.name, count(*)
FROM
stat s
JOIN users u ON u.id = s.id_user AND u.date BETWEEN :dt1 AND :dt2
GROUP BY u.id, u.name
Можно вывернуть наизнанку. Так получится вернуть и ноль статей для пользователей без статей. Как в первом запросе, но проагрегировать можно помимо количества статей, скажем, самое большое количество лайков (если бы у статьи было ещё число лайков). Или самую позднюю статью (если бы у статьи была дата публикации). Первый запрос на это не способен, вернее способен, но за счет либо доп затрат, либо ухищрений и не во всех диалектах.
SELECT u.name, count(*)
FROM
users u
LEFT JOIN stat s ON s.id_user = u.id
WHERE u.date BETWEEN :dt1 AND :dt2
GROUP BY u.id, u.name