@Scorpiored88

Как отфильтровать таблицу на дубли из конкретной колонки?

Всем привет! Начинаю изучать postgres и sql в целом, но вот уже столкнулся из задачой фильтрацыи дублей.
Помогите разобратся :(

Есть таблица users с 4 колонками : id , user_id, date, phone .
user_id уникален. Как мне не отображать строку,если в ней дублируется user_id ?

Вот запрос данных :

SELECT id,user_id,phone,date_time,id FROM  WHERE  phone IS NOT NULL ORDER BY id ASC;


Не пойму куда тут всунуть DISTINCT user_id ?
  • Вопрос задан
  • 349 просмотров
Пригласить эксперта
Ответы на вопрос 5
@DuD
SELECT DISTINCT user_id, id,phone,date_time,id FROM WHERE phone IS NOT NULL ORDER BY id ASC;

Или еще можно попробовать
SELECT id,user_id,phone,date_time,id FROM WHERE phone IS NOT NULL GROUP BY user_id ORDER BY id ASC;
Ответ написан
@Niomin
Если интересуют только сами уникальные id, то:
SELECT DISTINCT user_id from   WHERE  phone IS NOT NULL

Если не уникальные, то можно использовать такие функции, как MIN, MAX, какие-то ещё. В общем, требуется некоторые уточнение по задаче :)
Ответ написан
@dmitryKovalskiy
программист средней руки
Прошу пару уточнений. 1) user_id должен быть уникальным в рамках таблицы users? (на каждый user_id может быть только одна строка). Тогда вы неправильно создали таблицу - данное поле должно быть ключевым( ну или хотя бы частью ключа).
2) если не должен - то задача сводится к тому что вы хотите. Если вам нужен список уникальных userId -
SELECT user_id from users
WHERE phone is not null
GROUP BY user_id

Если вам нужно что-то еще - уточните что вы собственно хотите выбрать
Ответ написан
@nozzy
Silex, Symfony, Laravel, SQL
select
t1.id,
t1.user_id,
t1.phone,
t1.date
from your_table t1
inner join 
(
  select 
  min(id) as min_id,
  user_id
  from your_table
  group by user_id
) t2 on t2.min_id = t1.id
Ответ написан
zoroda
@zoroda
Необычный Fullstack. Ищу интересный стартап.
SELECT DISTINCT ON (user_id) -- выводить уникальные записи по полю user_id 
user_id,id,phone,date_time -- что выводить
FROM users 
WHERE  phone IS NOT NULL 
ORDER BY id ASC; -- если найдены дубли, то выведется запись с наименьшим id
Ответ написан
Ваш ответ на вопрос

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

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