我有以下数据库架构:
table courses:
id
tutor_id
title
table course_categories:
id
category_id
course_id
table categories:
id
name
table tutors:
id
name
table subscribers:
id
course_id
user_id
我需要创建 1 个 sql 来获取包含所有类别的课程、该课程的导师以及该课程的订阅者数量。这可以在 1 个查询中完成吗?这应该使用存储过程来完成吗?
通过此查询,您将得到您想要的:
select co.title as course,
ca.name as category,
t.name as tutor,
count(s.*) as total_subscribers
from courses co
inner join course_categories cc on c.id = cc.course_id
inner join categories ca on cc.category_id = ca.id
inner join tutors t on co.tutor_id = t.tutor_id
left join subscribers s on co.id = s.course_id
where co.title = 'Cat1'
group by co.title, ca.name, t.name
我在
left join
上使用 subscribers
,因为给定的 course
可能没有人。我假设所有其他表都有每个 course
、categorie
和 tutor
的数据。如果没有,您也可以使用 left join
,但随后您将获得 null 数据。
SELECT cou.title, cat.name, tu.name, COUNT(sub.user_id)
FROM courses cou, course_categories cca, categories cat, tutors tu, subscribers sub
WHERE cou.id = cca.id and cat.id = tu.id AND tu.id = sub.id
GROUP BY cou.title, tu.name;