循环列并分配0/1 MySQL

问题描述 投票:0回答:1

我有一个关于参加活动的消费者的 MySQL 数据库。数据库包含用户表、事件表和签入表,它们都是相互连接的。但数据库仅包含有关用户参加特定活动的信息。

我想要一个查询,循环遍历几个事件并检查用户是否访问了其中一个事件,并给出结果:

Preferred result

我尝试过以下查询:

select attend.idperson, attend.idmeeting,
    (select case when 
    attend.idmeeting = 2901 or
    attend.idmeeting = 9044 or
    attend.idmeeting = 9161 or
    attend.idmeeting = 2626
    then 1 else 0 end) as attended
from attend
join meetings on attend.idmeeting = meetings.idmeeting
join persons on attend.idperson = persons.id
where meetings.verified = 1;

但这会返回人员实际参加的所有会议,如果查询时选择的案例中的其中一个会议参加了,则分配 1,其余会议分配 0。目标是使用逻辑回归预测出勤率,该解决方案使所有进一步的用户数据产生偏差。

sql mysql loops select case
1个回答
0
投票

您可以建立所有人员和会议的列表,然后添加出席详细信息:

select distinct a1.*, 
       case
         when attend.idperson is null then 0 
         else 1 
       end as attended
from 
(
 select meetings.idmeeting, persons.id as p_id
 from meetings
 cross join persons
 where meetings.verified = 1
) a1
left join attend
  on attend.idmeeting = a1.idmeetings
  and attend.personid a1.p_id
© www.soinside.com 2019 - 2024. All rights reserved.