SQLでこれを効率的に行うことはできないと思います。それを行うための1つの遅い方法は、次のようなものです。
CREATE TEMPORARY TABLE tmp_table (...);
INSERT INTO tmp_table SELECT phone, max(rating) FROM table GROUP BY phone;
TRUNCATE table;
INSERT INTO table SELECT * FROM tmp_table;
より良い方法は、ストアドプロシージャまたは外部スクリプトです。 phone
の順に表からすべての行を選択します グループ化/マージ/削除を手動で実行します(結果を繰り返し、phone
と比較します) 前の行の値、異なる場合は新しいグループなど)。ただし、MySQLでストアドプロシージャを作成するのは面倒なので、コードを作成するつもりはありません。 :)