mysql - 选择回答了所有问题的用户

标签 mysql sql

我有这样的表格:

答案

idAnswer   idQuestion   Status   idGame
----------------------------------------
1          9            1        1
2          6            NULL     1
3          6            1        2
4          3            NULL     2
5          1            1        3
6          6            1        3
7          9            1        4
8          6            1        4  

表格游戏:

idGame   idUser
----------------
1        Greg
2        Greg
3        Jack
4        Frank

我只想得到那些回答了与游戏 n°4 相同问题的人,如下所示:

期望的结果:

idUser
-------
Greg
Frank

状态用于检查问题是否已得到解答。如果为NULL,则用户没有回答。

在这里,Frank 有一个非常相似的游戏(很明显,因为它是相同的,n°4)。

Greg 没有玩过类似的游戏,但在另外 2 个问题中回答了相同的问题,因此他出现在结果中。

jack 确实回答了其中一个问题 (n°6),但没有回答另一个问题 (n°9),因此 jack 没有出现。

因此,结果仅包括那些回答与另一游戏相同问题的人,无论是在类似游戏还是在多个游戏中。

游戏是随机生成的。有时,用户可以回答他们已经遇到或/和回答的问题。 (就像格雷格,在游戏 1 和 2 中)。

我尝试了很多查询。如果你愿意的话我可以发布它们。

感谢您的解答!

最佳答案

你可以试试这个:

SELECT g.idUser, COUNT(*) as NumberOfAnswers
FROM answer a
      INNER JOIN game g ON a.idGame = g.idGame
WHERE a.idQuestion IN (9,6)
GROUP BY g.idUser
HAVING NumberOfAnswers = 2

如果用户无法在同一游戏中回答同一问题两次,并且您不介意向用户显示回答了更多问题的用户,我认为此解决方案符合您的要求。

编辑:

对于更通用的解决方案,您可以将查询调整为如下所示:

SELECT g.idUser, COUNT(*) as NumberOfAnswers
FROM answer a
    INNER JOIN game g ON a.idGame = g.idGame
WHERE a.idCuestion IN (SELECT idQuestion FROM answer WHERE idGame=[DESIRED_GAME])
GROUP BY g.IdUser
HAVING NumberOfAnswers = (SELECT COUNT(*) FROM answer WHERE idGame = [DESIRED_GAME]

关于mysql - 选择回答了所有问题的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50581576/

相关文章:

mysql - 通过 MySql 对字母数字数据进行排序

MySQL 工作台错误 1064

php - 在带有 mysql 的 php 中,您可以将 $var 替换为 :var?

带案例的 Mysql 数据透视表

mysql - 处理超过 20 条记录时出现问题

SQL 转换错误(更新后的帖子)

sql - SQL 存储过程中注释的性能影响

sql - PostgreSQL 最小日期临时函数

python ( Pandas ): store a data frame in hdf5 with a multi index

mysql - Laravel 5.6 显示早于当前日期和时间的数据库记录