Когда нужно удалить дубликаты из результатов запроса, есть две основные альтернативы ключевому слову DISTINCT: GROUP BY и ROW_NUMBER().
GROUP BY объединяет строки с одинаковыми значениями в одну строку. Он наиболее эффективен в сочетании с агрегирующими функциями вроде SUM или COUNT.
SELECT Column1, Column2
FROM TableName
GROUP BY Column1, Column2;
ROW_NUMBER() — это оконная функция, которая присваивает уникальный порядковый номер каждой строке внутри определённого раздела. Фильтруя только первое вхождение (rn = 1), ты эффективно убираешь дубликаты.
WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Column1 ORDER BY Column2) AS rn
FROM TableName
)
SELECT * FROM CTE WHERE rn = 1;
GROUP BY эффективно удаляет дубликаты, объединяя строки с одинаковыми значениями в сгруппированных столбцах в одну строку, что делает его функционально эквивалентным DISTINCT при отсутствии агрегирующих функций.
Новый — ещё не проверен сообществом
Вы