У вас есть какой-нибудь первичный ключ в вашей таблице?Согласно вашей спецификации, вы этого не сделаете.
В этом случае:
DELETE
FROM group_table
WHERE (group_id, st_area)
IN (SELECT group_id, MAX(st_area) FROM group_table GROUP BY group_id);
Но если у вас есть ДВЕ строки с максимальными значениями, он удалит оба.
Если в этом случае вы хотите удалить только один, вы должны добавить столбец идентификатора для выбора:
DELETE
FROM group_table
WHERE (id)
IN (
SELECT MAX(id) FROM group_table
WHERE (group_id, st_area)
IN ( SELECT group_id, MAX(st_area)
FROM group_table
GROUP BY group_id)
GROUP BY group_id;
);
Таким образом, вы выбираете максимальный идентификатор для каждого максимального st_area дляid каждой группы.
В случае, если у вас есть такая структура:
id | gid | area
1 1 2
2 1 1
3 1 2
, первый запрос удалит строки 1 и 3, а второй запрос только 3.