Mysql 如何确定过去30天内每个用户的邀请数量?

Mysql 如何确定过去30天内每个用户的邀请数量?,mysql,mariadb,Mysql,Mariadb,我的数据库有两个与此问题相关的表: users: id, first_name, last_name, created_at invitations: id, user_id 我试图输出的是过去30天内创建的所有用户的列表,以及他们发出的邀请数量。。查询的所需输出: user.id | total_invitations 31 | 2 32 | 0 33 | 12 34 | 1 35 | 1 ..... 这是我正在进行的工作查询,我做错了什么 SELECT u.id,

我的数据库有两个与此问题相关的表:

users: id, first_name, last_name, created_at
invitations: id, user_id
我试图输出的是过去30天内创建的所有用户的列表,以及他们发出的邀请数量。。查询的所需输出:

user.id | total_invitations
31 | 2
32 | 0
33 | 12
34 | 1
35 | 1
.....
这是我正在进行的工作查询,我做错了什么

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
WHERE 
    i.type = 'email'
        AND i.revoked_at IS NULL
        AND 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;

ty

问题在于,您在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;

1用您正在使用的数据库标记您的问题。2为什么你认为有什么不对劲?你只需要在你的组中添加名字和姓氏,你就应该是金黄色的。了解您正在使用的RDBMS会有所帮助。我猜您使用的是mysql?您当前的输出是什么?您是否得到了错误或不正确的结果?它看起来真的很好,这是有道理的。谢谢你帮助我解决和理解这个问题
 GROUP BY u.id, u.first_name, u.last_name