在连接表上添加默认值

时间:2017-04-21 23:23:57

标签: mysql sql

我有以下表格:

用户

user_id  course_id  completion_rate
1        2          0.4
1        23         0.6
1        49         0.5
...      ...        ...

课程

course_id  title
1          Intro to Python
2          Intro to R
...        ...
70         Intro to Flask

用户表中的每个条目代表用户所用的课程。但是,用户很少参加每门课程。

我需要的是包含user_idcourse_idcompletion_rate的结果集。在用户已经完成课程的情况下,应该使用现有的completion_rate,但如果没有,那么completion_rate应该设置为0.也就是说,会有70行对于每个user_id,每个课程一个。

我没有很多SQL经验,而且我不知道从哪里开始。在像R这样的事情上做这件事会更容易吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

您应首先cross join使用不同用户的课程。然后left join就此获得所需的结果。如果用户未参加课程,则completion_rate为null,我们使用coalesce默认0

select c.course_id,cu.user_id,coalesce(u.completion_rate,0) as completion_rate
from courses c
cross join (select distinct user_id from users) cu
left join users u on u.course_id=c.course_id and cu.user_id=u.user_id

答案 1 :(得分:0)

Step1:从client_data(abc)获取不同的client_id,并使用课程数据(abc1)执行1 on 1 merge。 1对1合并有助于针对每个client_id编写所有课程

第2步:将上述数据集与client_id上的客户信息以及课程

合并
create table ans as
select p.*,case when q.completion_rate is not null then q.completion_rate else 0   
           end as completion_rate
from
(
   select a.client_id,b.course from
      (select distinct client_id from abc) a
   left join
      abc1 b
   on 1=1
) p
left join
abc q
on p.client_id = q.client_id and p.course = q.course
order by client_id,course;  

如有任何疑问,请与我联系。