2017-05-17 3 views
0

Ich habe eine Tabelle, die die Ähnlichkeit von zwei Fragen einer Testbank enthält. enter image description hereMySQL Zeile löschen ORDER BY COUNT DESC

Das bedeutet question_id 6 beträgt 84% ähnlich zu 10 question_id. Und es gibt 12 ähnliche Frage von question_id 6.

Ich gerade was die relevantesten Fragen oder die Top 7 relevanten Fragen.

Ich habe Mysql delete order by gesehen und versucht:

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 
    ) 

Aber die Fehlermeldung lautet:

[Err] 1055 - Ausdruck # 1 von SELECT-Liste ist nicht in GROUP BY-Klausel und enthält nichtaggregierte Spalte 'den.exam_relatedquestion.id', die funktional nicht von Spalten in GROUP BY-Klausel abhängig ist; dies ist unvereinbar mit sql_mode = only_full_group_by

Wie kann ich alle Zeilen löschen, die nicht die Top-7 relevant einer Frage sind?

+1

Warum Sie in erster Linie 'GROUP BY' verwenden? –

+0

@TimBiegeleisen Ich möchte Fragen in der Gruppe von 'from_question_id_id' sehen und dann das oberste relevante darin behalten. Aber ich weiß nicht, was der richtige Weg ist. – Aaron

Antwort

1

Das wird nicht funktionieren. Ihr Pseudocode ist sowieso nicht korrekt, weil die Sortierung in die falsche Richtung geht.

In jedem Fall können Sie Variablen verwenden, um die Fragen aufzuzählen, und dann join verwenden:

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

Danke für Ihre Antwort. Aber ich weiß nicht, was das 'erq' in meiner Situation bedeutet. Ich habe '[Err] 1051 - Unbekannte Tabelle' eqr2''. – Aaron