Этот вопрос проверяет знание альтернативных способов получения уникальных записей в SQL без использования DISTINCT.
Кроме DISTINCT, уникальности записей можно добиться с помощью GROUP BY по всем нужным столбцам, использованием оконных функций (например, ROW_NUMBER()) с фильтрацией, или путем агрегации и последующего разворачивания данных. Каждый метод имеет свои применения в зависимости от контекста.
DISTINCT — не единственный способ получить уникальные строки.
Альтернативы:
GROUP BY:
SELECT col1, col2 FROM table GROUP BY col1, col2;Это даст unique combinations of col1 and col2.
Оконные функции:
Например, использовать ROW_NUMBER() чтобы пронумеровать строки within a partition и выбрать только первые:
WITH ranked AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY some_col) as rn
FROM table
)
SELECT col1, col2 FROM ranked WHERE rn = 1;Подзапросы с агрегацией:
Например, выбрать MAX или MIN для каждой группы:
SELECT col1, col2, MAX(some_col)
FROM table
GROUP BY col1, col2;Сравнение:
DISTINCT прост и читаем, но may not be flexible.
GROUP BY может быть более efficient в некоторых случаях.
Оконные функции полезны для complex deduplication logic.