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 но это большая нагрузка на БД..
  • Вопрос задан
  • 1047 просмотров
Решения вопроса 1
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
Избегай использования DISTINCT если ест ьвозможност ьиспользовать GROUP BY, как правило DISTINCT нужен если запрос неправильно составлен и ведет к потере производительности.

это правильно только в случае, если ты прям субд гуру (к слову ни я ни Владимир ими не являемся) и хочешь выжать максимум.
Итак разберемся в чем же отличие DISTINCT от GROUP BY?
DISTINCT - это частный случай GROUP BY автоматически находящий оптимальную стратегию. В сферическом вакууме правильно составленный GROUP BY запрос отправленный к оптимизированной бд будет всегда впереди, но в реальности эти оптимизированные базы пойди еще найди и поэтому в большинстве случаев DISTINCT быстрее. Кроме того большинство разработчиков зарабатывает допиливанием всяких там вордпрессов и повлиять на структуру базы не может. Поэтому нужно выбирать средства по ситуации и по силам.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
1) Если ты выбираешь leads.* у тебя DISTINCT уже не сработает, потому что дистинкт работает по всей выборке, убирая дубли, а ты выбираешь все поля из таблицы leads
2) У тебя в выборке есть поле sites.NAME_SITE а join для таблицы sites не прописан
3) Избегай использования DISTINCT если ест ьвозможност ьиспользовать GROUP BY, как правило DISTINCT нужен если запрос неправильно составлен и ведет к потере производительности.
4) Из твоего запроса вообще непонятно чего ты хочешь добиться, каким образом можно выбрать уникальные PHONE вместе со всеми полями из таблицы, можно выбрать только PHONE , можно выбрать например уникальное сочетание PHONE и DATE уж не знаю какие у тебя там еще поля.
https://www.datacamp.com/community/tutorials/sql-t...

The DISTINCT Clause

The SELECT DISTINCT statement is used to return only distinct (different) values. DISTINCT is a clause that you should definitely try to avoid if you can. As you have read in other examples, the execution time only increases if you add this clause to your query. It’s therefore always a good idea to consider whether you really need this DISTINCT operation to take place to get the results that you want to accomplish.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы