FROM table_temp
GROUP BY key
HAVING COUNT(*) > 1
Могу ли я без ощутимого ущерба производительности, принципиально не меняя конструкцию запроса, выбирать не min(ctid), а что-то типа first(ctid), задавая order by length(col), где col - некоторая колонка данной таблицы, которой нет в группировке ?
Подошло бы что-то вроде:
SELECT first_value(ctid) within group (order by length(col)), key
FROM table_temp
GROUP BY key
HAVING COUNT(*) > 1
Если не учитывать производительность, то подошел бы следующий запрос:
SELECT (array_agg(ctid order by length(col)))[1], key
FROM table_temp
GROUP BY key
HAVING COUNT(*) > 1
Переведу твой вопрос на совсем примитивный русский: "У меня есть запрос, могу ли я написать совсем другой запрос, но чтобы он был такой же, как этот, и так же быстро работал". Ответ естественно -- "нет". Ну и видимо тебе нужны оконные функции.
Обсуждают сегодня