mySQL-使用外部查询值作为子查询的列名

mySQL-使用外部查询值作为子查询的列名,mysql,sql,subquery,Mysql,Sql,Subquery,我有一张桌子可以放考试题;另一张放考试答案的桌子 我想开发一个查询,列出考试问题,以及每个问题最常见的答案 问题表的相关部分如下所示: name question_text ex1_qs1 1. What is furry and has four legs? ex1_qs2 2. What is hairless and has two legs? session_id ex1_qs1 ex1_qs2 123456789 cat man 112233445

我有一张桌子可以放考试题;另一张放考试答案的桌子

我想开发一个查询,列出考试问题,以及每个问题最常见的答案

问题表的相关部分如下所示:

name    question_text 
ex1_qs1 1.    What is furry and has four legs? 
ex1_qs2 2.    What is hairless and has two legs? 
session_id  ex1_qs1 ex1_qs2 
123456789   cat man 
112233445   dog woman
111222333   dog woman
Select name, question_text 
From questions
Order By LENGTH(name), name
SELECT ex1_qs1
FROM responses
GROUP BY ex1_qs1
ORDER BY COUNT(*) DESC LIMIT 1
回复表的相关部分如下所示:

name    question_text 
ex1_qs1 1.    What is furry and has four legs? 
ex1_qs2 2.    What is hairless and has two legs? 
session_id  ex1_qs1 ex1_qs2 
123456789   cat man 
112233445   dog woman
111222333   dog woman
Select name, question_text 
From questions
Order By LENGTH(name), name
SELECT ex1_qs1
FROM responses
GROUP BY ex1_qs1
ORDER BY COUNT(*) DESC LIMIT 1
我知道我可以得到这样的问题列表:

name    question_text 
ex1_qs1 1.    What is furry and has four legs? 
ex1_qs2 2.    What is hairless and has two legs? 
session_id  ex1_qs1 ex1_qs2 
123456789   cat man 
112233445   dog woman
111222333   dog woman
Select name, question_text 
From questions
Order By LENGTH(name), name
SELECT ex1_qs1
FROM responses
GROUP BY ex1_qs1
ORDER BY COUNT(*) DESC LIMIT 1
每个问题最常见的回答如下:

name    question_text 
ex1_qs1 1.    What is furry and has four legs? 
ex1_qs2 2.    What is hairless and has two legs? 
session_id  ex1_qs1 ex1_qs2 
123456789   cat man 
112233445   dog woman
111222333   dog woman
Select name, question_text 
From questions
Order By LENGTH(name), name
SELECT ex1_qs1
FROM responses
GROUP BY ex1_qs1
ORDER BY COUNT(*) DESC LIMIT 1
但我不知道如何将其作为子查询放在一起,因为子查询所需的列名是主查询中的一个值。我也不能把它硬编码成一堆工会

既然我需要在外部查询中使用name字段的值,那么我应该在下面使用什么来代替硬编码的ex1qs1?还是需要另一种方法

Select name, question_text, (SELECT ex1_qs1 FROM responses GROUP BY ex1_qs1 ORDER BY COUNT(*) DESC LIMIT 1) as most_common_response 
From questions
Order By LENGTH(name), name

您是否能够更改响应表的结构?它应该被规范化,这样您就有了session\u id、question\u name和response列,其中question\u name是questions表的外键,而不是每个问题的一列。这将使这更容易管理…嗨,迈克尔,我同意,但不,不幸的是,我不能改变它。该网站为这些考试使用了一个组件。不确定您是否能够在此设置中使用该组件。也许创建一个新的汇总表并使用自动代码定期更新它会起作用。