我正在开发一个基于测验的项目,用户访问并进行测验。我想列出在 5 个模块测验中每个测验中必须出现并失败的用户数量。我正确地理解了这一点。现在,如果用户重新出现在 5 个测验中的任何一个中并通过,他/她不得包含在前面提到的计数中。
我对所有 5 个模块中出现和失败的用户数量进行计数的查询是,
SELECT count(DISTINCT module_id) as module_id from tbl WHERE user_id = $userId AND cleared = 0,
其中 user_id 是用户的 ID,如果失败,则清除设置为 0,如果通过,则设置为 1。 虽然上面的查询统计了用户已经通过的模块数量。我将其用于函数中,然后在 if 语句中进行比较。 我只是想弄清楚我可以在这里进行哪些更改,以便如果用户传递任何模块,它们不应该包含在其中。我已经尝试过,但没有得到正确的查询构建。任何建议都会有帮助。
最佳答案
使用条件聚合:
SELECT user_id
FROM tbl
GROUP BY user_id
HAVING COUNT(DISTINCT module_id) = 5 AND SUM(cleared) = 0;
-- ^^ appeared in all 5 modules ^^ and failed them all
如果您想将上述查询限制为仅对一个或几个用户进行,那么您可以添加回 WHERE
子句。
关于php - mysql查询根据特定条件对数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50288336/