我正在开发一个内部网Web应用程序,为用户提供简短的测验。 问题是:我有以下数据库设计:
员工表:用户名,姓名,职位,分部ID
分区表:DivisionID,DivisionName
测验表:QuizID,标题,描述
UserQuiz表:UserQuizID,Score,DateTimeComplete,QuizID,Username
注意:每个表中的第一个属性是主键。
我需要提出一个显示以下内容的查询:
那么怎么做?
答案 0 :(得分:2)
此查询为您提供未参与任何测验的用户列表:
SELECT Name, DivisionName FROM Employee AS E
LEFT OUTER JOIN Division AS D ON E.DivisionID = D.DivisionID
WHERE Username NOT IN (SELECT Username FROM UserQuiz)
这为您提供了非参与者的数量:
SELECT COUNT(*) FROM Employee
WHERE Username NOT IN (SELECT Username FROM UserQuiz)
更新以回答评论中的问题:
根据测验和分组对非参与者进行分组和计数:
SELECT Q.QuizId, D.DivisionName, E.Name FROM Quiz AS Q
CROSS JOIN Employee AS E
LEFT OUTER JOIN Division AS D ON E.DivisionID = D.DivisionID
WHERE NOT EXISTS (SELECT * FROM UserQuiz AS UQ
WHERE UQ.Username = E.Username AND UQ.QuizID = Q.QuizID)
ORDER BY Q.QuizId, D.DivisionName