Ответ
В SQL есть два основных подхода:
1. Ключевое слово DISTINCT
Удаляет дубликаты из результирующего набора по всем выбранным столбцам.
-- Уникальные значения из одного столбца
SELECT DISTINCT department FROM employees;
-- Уникальные комбинации из нескольких столбцов
SELECT DISTINCT first_name, last_name FROM users;
2. Агрегация с GROUP BY
Позволяет не только удалить дубликаты, но и выполнить вычисления над группами.
-- Уникальные имена с подсчетом количества повторений
SELECT first_name, COUNT(*) as count
FROM users
GROUP BY first_name;
Важные различия:
DISTINCTприменяется ко всему набору результатов после выборки.GROUP BYгруппирует строки перед применением агрегатных функций (COUNT, SUM, AVG).- Для производительности на больших таблицах с
GROUP BYчасто нужны индексы по группируемым полям.
В коде (Python):
# Использование set (порядок не сохраняется)
data = [1, 2, 2, 3, 1]
unique_data = list(set(data)) # [1, 2, 3]
# Сохранение порядка появления (Python 3.7+)
from collections import OrderedDict
unique_ordered = list(dict.fromkeys(data)) # [1, 2, 3] Ответ 18+ 🔞
А, слушай, про эти ваши DISTINCT и GROUP BY, блядь. Ну, как бы, два способа, чтобы убрать повторы, но они, сука, разные, как хуй и палец, понимаешь?
1. DISTINCT — это типа «выкинь повторы, и всё» Вот просто взял и выкинул, как мусор, нахуй. Применяется ко всему, что после SELECT вылезло.
-- Смотри, какие отделы вообще есть, без повторов
SELECT DISTINCT department FROM employees;
-- А вот уникальные пары имени и фамилии, блядь
SELECT DISTINCT first_name, last_name FROM users;
Просто, быстро, без затей. Но нихуя больше не сделаешь — только уникальность.
2. GROUP BY — это уже посерьёзнее, блядь Тут уже не просто выкинуть, а сгруппировать и, сука, посчитать что-то можно! Это как не просто разобрать бардак в комнате, а ещё и посчитать, сколько носков каждого цвета.
-- Уникальные имена и сколько раз они встретились, ёпта
SELECT first_name, COUNT(*) as count
FROM users
GROUP BY first_name;
А теперь, блядь, важный момент, чтобы не облажаться:
DISTINCTработает после того, как всё выбрал — просто отфильтровал результат, как сито.GROUP BY— это сначала сгруппировал строки, а потом уже к каждой группе можно применить COUNT, SUM, AVG и прочую хуйню.- И да, на больших таблицах с
GROUP BYбез индексов по тем полям, по которым группируешь, можно, блядь, до второго пришествия ждать. Серьёзно, производительность ебётся в ноль.
Ну и в Питоне, для полноты картины:
# Через set — быстро, но порядок, блядь, нахуй слетит
data = [1, 2, 2, 3, 1]
unique_data = list(set(data)) # [1, 2, 3] (порядок хрен знает какой)
# Если порядок появления важен (Python 3.7+)
from collections import OrderedDict
unique_ordered = list(dict.fromkeys(data)) # [1, 2, 3] (порядок сохранился)
Вот и вся магия, ёпта. Выбирай, что тебе надо: просто отсеять повторы или ещё и статистику по ним собрать.