问题是你正在限制
LEFT JOIN'd
在WHERE子句中有效地将其转换为内部联接的表。相反:
SELECT u.id,
u.first_name,
u.last_name,
u.invitation_approved_at,
COUNT(i.id) AS Total
FROM users u
LEFT JOIN invitations i
ON u.id = i.user_id
AND i.type = 'email'
AND i.revoked_at IS NULL
WHERE u.invitation_approved_at >= curdate() - INTERVAL 30 DAY
AND u.invitation_approved_at < curdate() - INTERVAL -7 DAY
GROUP BY u.id
ORDER BY u.invitation_approved_at;
把这两个条件转移到
ON
子句导致在联接发生之前而不是之后筛选这些记录。
我也主张包括你的
first_name
和
last_name
你的领域
GROUP BY
因为如果您的
分组依据
条款。我不确定MariaDB的新版本是否会抛出错误,但MySQL的新版本肯定会(低于5.7的版本会像现在这样运行):
GROUP BY u.id, u.first_name, u.last_name