2017-05-17 91 views
0

我有一張表,其中包含測試銀行每兩個問題的相似度。 enter image description hereMySQL刪除行ORDER BY COUNT DESC

這意味着question_id 6與question_id 10有84%的相似度。 還有12個類似question_id 6的問題。

我只是最相關的問題,或前7個相關問題。

我見過Mysql delete order by 和嘗試:

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 
    ) 

但錯誤信息是:

[錯誤] 1055 - SELECT列表中的表達#1是不是在GROUP BY子句 和包含非聚集列'den.exam_relatedquestion.id',其中 在功能上不依賴於GROUP BY子句中的列;這是 用的sql_mode不相容= only_full_group_by

如何刪除不屬於前7相關問題的任何行?

+1

在任何情況下,你可以使用變量來枚舉的問題,然後用join? –

+0

@TimBiegeleisen我希望通過'from_question_id_id'在組中查看問題,然後保留與之相關的頂部。但我不知道什麼是正確的方法。 – Aaron

回答

1

這是行不通的。無論如何,你的僞代碼是不正確的,因爲排序是錯誤的方向。你爲什麼要擺在首位使用`集團BY`

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; 
+0

感謝您的回答。但我不知道'erq'在我的情況下意味着什麼。我得到了'[Err] 1051 - 未知表格'eqr2''。 – Aaron