MySQL查询计算满足两个条件的行并返回这些计数的有组织列表

时间:2016-01-06 13:41:56

标签: mysql

我们学校有一些非常受欢迎的课外活动,因为它有数百名成员,但只有少数导师,我们有严格的出勤政策,让会员在第三次无故之后被踢出不存在

我为运行活动而创建的PHP-JS-MySQL网站存储了人们在此MySQL表中参加会议的信息:

meetings_attendance (meetings_id, members_id, attendance, excuse)

在此表中,meetings_idmembers_id是引用表中int主键的索引,显然包括会议和成员。 attendanceenum,其值可以是"Pending""Present""Absent""Excused"excuse是{{} 1}}如果成员存在,可以保留为null。

由于我自己运行该程序,我不一定希望在网站中包含踢出功能(我想手动完成,在每个成员被踢出之前联系每个成员{{1 varchar(300)表的行中的值设置为status)。我正在尝试从members表格中获取会员姓名,电子邮件地址和电话号码的列表:

"Inactive"

我一直在尝试各种MySQL查询组合来获取成员的缺席计数列表,但无济于事。我已经尝试过类似下面的内容了,我觉得我应该在某个地方使用members,但我无法确切地确定在哪里或如何。

members (`id`, `firstname`, `lastname`, `email`, `phone`........)

3 个答案:

答案 0 :(得分:1)

计算每个成员的缺席数并保留计数> = 3(使用GROUP BY和HAVING)。然后使用成员表连接这样找到的成员并显示结果:

select
  m.firstname,
  m.lastname,
  m.email,
  m.phone,
  a.absences
from members m
join
( 
  select members_id, count(*) as absences
  from meetings_attendance
  where attendance = "Absent"
  group by members_id
  having count(*) >= 3
) a on a.members_id = m.id;

答案 1 :(得分:0)

SELECT firstname, lastname, email, phone, absences FROM members
WHERE id IN
(SELECT members_id FROM 
(SELECT members_id, COUNT(*) FROM meetings_attendance
 WHERE attendance = "Absent"
GROUP BY members_id
HAVING COUNT(*) >= 3 )  AS tab1)

答案 2 :(得分:0)

尝试格式化下面的代码并告诉我它是否能解决您的问题

SELECT *,(SELECT COUNT(*) FROM table2 WHERE table2.field1 = table1.id) AS count FROM table1 WHERE table1.field1 = 'value'