MySQL按计数说明删除行顺序
我有一个表格,其中包含一个测试库中每两个问题的相似性。 这意味着问题6与问题10的相似性为84%。 还有12个类似的问题_id6 我只知道最相关的问题是什么,或者前7个相关问题 我见过 并尝试:MySQL按计数说明删除行顺序,mysql,group-by,mysql-error-1055,Mysql,Group By,Mysql Error 1055,我有一个表格,其中包含一个测试库中每两个问题的相似性。 这意味着问题6与问题10的相似性为84%。 还有12个类似的问题_id6 我只知道最相关的问题是什么,或者前7个相关问题 我见过 并尝试: DELETE FROM exam_relatedquestion WHERE `exam_relatedquestion`.id IN ( SELECT `exam_relatedquestion`.id FROM
DELETE FROM exam_relatedquestion
WHERE
`exam_relatedquestion`.id IN (
SELECT
`exam_relatedquestion`.id
FROM
(
SELECT `exam_relatedquestion`.id
FROM `exam_relatedquestion`
GROUP BY
`exam_relatedquestion`.from_question_id_id
ORDER BY
`exam_relatedquestion`.similarity DESC
LIMIT 7
) a
)
但错误信息是:
[Err]1055-选择列表的表达式1不在GROUP BY子句中
并包含未聚合的列“den.exam\u relatedquestion.id”,其中
在功能上不依赖于GROUPBY子句中的列;这是
与sql\u模式不兼容=仅\u完整\u组\u由
如何删除与问题前7位不相关的行?不起作用。您的伪代码无论如何都不正确,因为排序方向错误 在任何情况下,您都可以使用变量枚举问题,然后使用联接:
首先为什么要使用GROUP BY?@TimBiegeleisen我想在GROUP BY中查看来自_question _id _id的问题,然后保留其中最相关的问题。但是我不知道正确的方法是什么。谢谢你的回答。但我不知道erq在我的情况下意味着什么。我得到了[Err]1051-未知表'eqr2'。
delete erq
from exam_relatedquestion erq join
(select erq2.*,
(@rn := if(@q = erq2.from_question_id_id, @rn + 1,
if(@q := erq2.from_question_id_id, 1, 1)
)
) as seqnum
from exam_relatedquestion erq2 cross join
(select @rn := 0, @q := -1) params
order by erq2.from_question_id_id, score desc
) erq2
on erq2.id = erq.id
where rn > 7;