观看各种帖子,我仍然在努力创建一个查询。我试图在课程中摆脱用户进程。这是我的数据库设置。
COURSE TABLE:
(CourseID | Product | CourseName | TotalModules | CreationDate)
MODULE TABLE:
(ModuleID | Product | ModuleName | TotalPages | CreationDate)
MODULECOURSEASSOCIATION TABLE:
(CourseID | ModuleID | CreationDate)
User TABLE:
(UserID | StudentEmail | CreationDate)
PROGRESSION TABLE:
(ProgressionID | ModuleID | UserID | PageNumber, CreationDate)
Progression表记录了ProgressionIDs,用户看到的模块以及相关日期。我想要完成的是:
在课程级别上有一个总页面进度计数。
即。一个CourseID" 1",可能有3个模块。 3个模块中的每一个都有3个与之关联的页面。所以课程共有9页,#34; A"在ProductID = 2。
UserID" 1"已经在ProductID = 2的第一个模块中看到了第1页,第2页,第3页。然后,进展计数应为30%。如何在查询中写这个?
我试过了:
SELECT count(1) AS TotalModulesCompleted
FROM (select count(PageNumber) AS NumPages,
(select TotalPages
from Module, ModuleCourseAssociation
where Module.ModuleID = ModuleCourseAssociation.ModuleID and
ModuleCourseAssociation.CourseID = 1 and Module.ProductID = 2) AS TotalPages,
(select CourseID from ModuleCourseAssociation
where ModuleCourseAssociation.ModuleID = Progression.ModuleID
and CourseID=8) AS CourseID
FROM Progression WHERE UserID = 11 GROUP by ModuleID)
CourseProgression
WHERE NumPages = TotalPages;
我很失落。任何帮助表示赞赏。
答案 0 :(得分:0)
我认为您需要针对某个特定学生的每门课程提供此信息。
您已请求完成百分比。因此,您将需要查询中的两条信息:
考虑到这一点,只要正确加载数据库,以下内容应该有效:
SELECT
c.CourseID
,c.CourseName
,SUM(m.TotalPages) AS CourseTotalPages
,SUM(up.PageNumber) AS UserTotalPages
,SUM(up.PageNumber) / SUM(m.TotalPages) AS UserPercentageComplete
FROM `Course` c
JOIN `ModuleCourseAssociation` cm ON c.CourseID = cm.CourseID
JOIN `Module` m ON cm.ModuleID = m.ModuleID
LEFT JOIN `Progression` up ON m.ModuleID = up.ProgressionID
LEFT JOIN `User` u ON up.UserID = u.UserID
WHERE c.ProductID = 2
AND (u.UserID = 11 OR u.UserID IS NULL) -- Cats or nothing
GROUP BY c.CourseID
,c.CourseName
我提供了一个SQLFiddle here。