通过选择SQL保持已回答的问题并删除分组中的其他人

时间:2017-05-16 11:18:42

标签: mysql sql

我有一个questions表,其中包含以下字段:

question_id  
text  
answer

有很多问题都有完全相同的文字。但其中一些没有得到回答而且他们的answer是空的。

我想选择具有相同文本的问题,然后保留其中一个已回答的问题(例如,不为空)并删除其他问题。

为此我成功写了这个SQL:

SELECT
  group_concat(question_id),
  text,
  count(question_id) AS count
FROM questions
GROUP BY text
HAVING count > 1
ORDER BY count DESC

这是一个结果:

enter image description here

但我不知道我怎么能按照上面的说法去做。

我正在使用mysql。

1 个答案:

答案 0 :(得分:0)

首先,您需要为每个不同的文本提取最大值(答案)。所以,执行

select text,max(answer) as Maxanswer FROM questions group by text

这将为您提供每个文本组的最大值(答案)。

接下来使用问题表进行内部联接,以检索具有max(回答)的每个不同文本的question_id。

Select question_id from questions q1
inner join (select text,max(answer) as Maxanswer FROM questions group by text)dt
on dt.maxanswer=q1.answer and dt.text=q1.text

你只需要保存带有max(answer)文本的行。所以,用上面的选择左边连接上面的问题表。(问题表左边)。先用Select命令查看结果在删除之前

Select *
from questions q
left join
(Select question_id from questions q1
inner join (select text,max(answer) as Maxanswer FROM questions group by text)dt
on dt.maxanswer=q1.answer and dt.text=q1.text)dt1
on q.question_id =dt1.question_id 
where dt1.question_id  is null

从上面选择,dt1对q表的值仅对于文本为max(answer)的question_ids不为空。然后修改select to delete,如下所示

delete q
from questions q
left join
(Select question_id from questions q1
inner join (select text,max(answer) as Maxanswer FROM questions group by text)dt
on dt.maxanswer=q1.answer and dt.text=q1.text)dt1
on q.question_id =dt1.question_id 
where dt1.question_id  is null