Php 按总计分组选择(mySQL)

Php 按总计分组选择(mySQL),php,mysql,Php,Mysql,我已经摆弄了大约20分钟了,虽然我可能会得到一些帮助。我有两张桌子,多对一的关系。用户(一个)和事件(多个)。简化后的表格如下所示: users ----------- user_id group_id events ----------- user_id 我正在尝试生成一个报告,该报告将显示每个组中至少有一个事件的用户数。因此,结果集有望如下所示: group_id users_with_at_least_one_event 1 689 2 312

我已经摆弄了大约20分钟了,虽然我可能会得到一些帮助。我有两张桌子,多对一的关系。用户(一个)和事件(多个)。简化后的表格如下所示:

users
-----------
user_id
group_id

events
-----------
user_id
我正在尝试生成一个报告,该报告将显示每个组中至少有一个事件的用户数。因此,结果集有望如下所示:

group_id   users_with_at_least_one_event
1          689
2          312
试一试


可能吧?

我认为这是不对的,因为它返回了30K+,即使该组有2700名成员。在查询中添加了
distinct
,试试看。这只是从事件表中给出了每个组中的用户数。
users\u with_至少有一个事件
是根据OP给出的名称计算的
用户数。OP可以将其更改为
count(distinct events)
,如果这是他/她想要的。这只是返回事件表中的用户列表。这只是从事件表中给出每个组中的用户数。这很有效,并且允许我说“有3个以上的事件”--虽然它确实需要将表名添加到一些列名中以消除歧义。哦,对不起,您是对的。我忘了在字段前面加上表名别名。很高兴它对你有用。我决定消除这种模糊性。
select users.group_id, count(distinct users.user_id) as users_with_at_least_one_event
from 
users, events 
where users.user_id = events.user_id 
group by users.group_id
SELECT users.group_id, COUNT(*) FROM users 
WHERE users.user_id IN (SELECT events.user_id FROM events)
SELECT group_id, COUNT(users.user_id) AS users_with_at_least_one_event,
FROM users, events
WHERE users.user_id = events.user_id
GROUP BY group_id
SELECT  group_id, count(*) users_with_at_least_one_event
FROM 
(
SELECT  u.user_id, u.group_id, count(*) as event_count
FROM    users u
        JOIN events e
        ON u.user_id = e.user_id
GROUP BY u.user_id, u.group_id
HAVING count(*) > 1
) sub
GROUP BY group_id