sql - 连接值以获取新列名,然后使用该列值进行比较
问题描述
这是我的 SQL: 表 1 问题:
ID | 问题 | 选项1 | 选项_2 | 选项_3 | 正确答案 |
---|---|---|---|---|---|
1 | 你叫什么名字 | 拉吉 | 基兰 | 沙笼 | 1 |
2 | 你的宠物名字 | 布鲁诺 | 汤米 | 承办人 | 2 |
表 2:member_answers
ID | q_id | 回答 |
---|---|---|
1 | 1 | 拉吉 |
2 | 2 | 汤米 |
SELECT
count(*) as total_questions,count(ma.answers) submitted_answers,
count(if(ma.answer = concat('option_',q.right_answer),1, NULL)) as correct_answers
FROM questions q
LEFT JOIN member_answers ma
on q.ID = ma.q_id
WHERE AND right_answer != 0;
这里right_answer
保存一个int
值,answer
列保存文本答案值。
无法配置如何映射连接两个值并获取第三列值进行比较。
在 if 条件下,如果 right_answer 持有 1 作为正确答案,则使用文本“option_1”检查答案值。但我想比较 answer 和 option_1 列值。它将“option_1”视为文本而不是列,请有人帮助我。
解决方案
我认为您应该考虑的第一件事是规范化您的表格并重新设计它,但是要回答您的问题,这是您可以做到的一种方法:
select
count(*) as total_questions
, count(ma.answers) submitted_answers
, count(case right_answer when
1 then case when ma.answer = option_1 then 1 else null end
2 then case when ma.answer = option_2 then 1 else null end
3 then case when ma.answer = option_3 then 1 else null end
else null
end) correct_answers
FROM questions q
LEFT JOIN member_answers ma
on q.ID = ma.q_id
...
推荐阅读
- c - 如何在 C 中打印 char 数组,如 Java 的 'Arrays.ToString(array)'?
- amazon-web-services - 如何知道在云端起点时用于访问云端端点的 CNAME
- python - joblib 是否优化了常用参数或对象的反序列化?
- bash - 使用 grep 的正则表达式没有输出
- python - 如何在 Windows 上配置 Tor 代理?
- python - 异常问题
- algorithm - 使用空间索引查找彼此范围内的点
- google-maps - 我想实现谷歌地图视图来获取用户点击的位置
- simulation - 如何为每个资源设置随机休息时间?
- javascript - React Component 收到 props 但不渲染它,为什么?