Задать вопрос
RGameShow
@RGameShow
В поисках ответов на глупые вопросы

Как правильно работать с DISTINCT?

Есть запрос:
SELECT leads.*
FROM leads
WHERE leads.DATE_CREATE BETWEEN "2020-11-01T00:00:00+03:00" AND "2020-11-30T23:59:59+03:00"

Мне нужно чтобы в выгрузке были только уникальные телефонные номера, т.е. убираем дубли, я делаю это через DISTINCT leads.PHONE. Но как правильно работать с DISTINCT? В запросе ниже я добавил DISTINCT, но на выходе он делает уникальными и leads.* и sites.NAME_SITE...
SELECT DISTINCT leads.PHONE, leads.*
FROM leads
WHERE leads.DATE_CREATE BETWEEN "2020-11-01T00:00:00+03:00" AND "2020-11-30T23:59:59+03:00"


Как грамотна отсеять дубли?
В курсе про GROUP BY но это большая нагрузка на БД..
  • Вопрос задан
  • 1298 просмотров
Подписаться 1 Средний Комментировать
Решение пользователя Антон Шаманов К ответам на вопрос (2)
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
Избегай использования DISTINCT если ест ьвозможност ьиспользовать GROUP BY, как правило DISTINCT нужен если запрос неправильно составлен и ведет к потере производительности.

это правильно только в случае, если ты прям субд гуру (к слову ни я ни Владимир ими не являемся) и хочешь выжать максимум.
Итак разберемся в чем же отличие DISTINCT от GROUP BY?
DISTINCT - это частный случай GROUP BY автоматически находящий оптимальную стратегию. В сферическом вакууме правильно составленный GROUP BY запрос отправленный к оптимизированной бд будет всегда впереди, но в реальности эти оптимизированные базы пойди еще найди и поэтому в большинстве случаев DISTINCT быстрее. Кроме того большинство разработчиков зарабатывает допиливанием всяких там вордпрессов и повлиять на структуру базы не может. Поэтому нужно выбирать средства по ситуации и по силам.
Ответ написан
Комментировать