我有以下表格:
用户
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_id
,course_id
,completion_rate
的结果集。在用户已经完成课程的情况下,应该使用现有的completion_rate
,但如果没有,那么completion_rate
应该设置为0.也就是说,会有70
行对于每个user_id
,每个课程一个。
我没有很多SQL经验,而且我不知道从哪里开始。在像R这样的事情上做这件事会更容易吗?
谢谢。
答案 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;
如有任何疑问,请与我联系。