首页 > 解决方案 > 连接值以获取新列名,然后使用该列值进行比较

问题描述

这是我的 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”视为文本而不是列,请有人帮助我。

标签: sql

解决方案


我认为您应该考虑的第一件事是规范化您的表格并重新设计它,但是要回答您的问题,这是您可以做到的一种方法:

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
...

推荐阅读