0

テストバンクの 2 つの質問ごとの類似性を含むテーブルがあります。 ここに画像の説明を入力

これは、 question_idが question_id6と 84% 類似していることを意味します10。また、question_id の類似の質問が 12 件あります6

最も関連性の高い質問、または関連性の高い上位 7 つの質問です。

私はMysqlの削除順序を見て 、試しました:

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 - SELECT リストの式 #1 は GROUP BY 句になく、GROUP BY 句の列に機能的に依存しない非集計列 'den.exam_relatedquestion.id' が含まれています。これは sql_mode=only_full_group_by と互換性がありません

質問に関連する上位 7 件以外の行を削除するにはどうすればよいですか?

4

1 に答える 1

1

それはうまくいきません。ソートが間違った方向にあるため、疑似コードはとにかく正しくありません。

いずれの場合でも、変数を使用して質問を列挙し、次を使用できますjoin

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;
于 2017-05-17T01:55:46.580 に答える