我有一个用于收集用户评估的表,其结构非常基本,下面定义了一些示例行:
id_user | id_affirmation | isCorrect
------------------------------------
1 | 10 | true
1 | 13 | false
2 | 23 | true
2 | 45 | false
3 | 31 | false
3 | 90 | true
3 | 67 | true
在应用程序中,用户基本上评估肯定是正确还是错误,将其标记为真或假。每个肯定只评估一次,因此用户正在评估不同的肯定。
我要做的是选择一个类似下面的结果集,在那里我可以计算每个用户标记为正确的肯定数和他们标记为假的数字。
user | correct_count | wrong_count
------------------------------------
1 | 35 | 12
2 | 76 | 22
3 | 23 | 41
我有一个查询来计算每个用户的正确答案的数量,我可以简单地将ísCorrect'字段的预期值更改为false,因此我将计算每个用户给出的错误答案的数量。我的问题是如何收集corrcet计数和错误计数,因为我不能简单地使用UNION。
答案 0 :(得分:3)
SELECT id_user,
SUM(isCorrect),
SUM(NOT isCorrect)
FROM mytable
GROUP BY
id_user
答案 1 :(得分:2)
假设isCorrect
被存储为VARCHAR字符串值true
和false
,获取计数的一种方法是在SELECT列表中使用条件布尔值,并执行使用聚合解决这个问题。
例如:
SELECT t.user
, SUM(t.isCorrect='true') AS correct_count
, SUM(t.isCorrect='false') AS wrong_count
FROM mytable t
GROUP BY t.user
如果有true
或false
以外的值,那么这些值是否会包含在其中? (例如NULL
,'maybe'
等等,或者如果isCorrect
的数据类型不是VARCHAR,则需要适当修改条件表达式,以便每个表达式返回{ {1}}如果要包含在计数中,则为{1}},如果不包括在内,则为1
。