У меня есть таблица на pgsql с именами (имеющая более 1 миллиона строк), но у меня также есть много дубликатов. Я выбираю 3 поля: id
, name
, metadata
.
Я хочу выбрать их случайным образом с помощью ORDER BY RANDOM()
и LIMIT 1000
, поэтому я делаю это много шагов, чтобы сэкономить немного памяти в моем скрипте PHP.
Но как я могу это сделать, чтобы он давал мне только список, не имеющий дубликатов в именах.
Например [1,"Michael Fox","2003-03-03,34,M,4545"]
будет возвращено, но нет [2,"Michael Fox","1989-02-23,M,5633"]
. Поле имени является наиболее важным и должно быть уникальным в списке каждый раз, когда я выбираю, и оно должно быть случайным.
Я пробовал с GROUP BY name
, но тогда он ожидает, что у меня будут идентификатор и метаданные GROUP BY
также или в функции aggragate, но я не хочу, чтобы они как-то фильтровались.
Кто-нибудь знает, как получить много столбцов, но сделать только отдельный столбец?
источник
order by name
требуется? Будет ли это давать другой результатorder by col1
?name
надо. Проверьтеdistinct on
в руководстве.Вы хотите , чтобы в
DISTINCT ON
пункт .Вы не предоставили образцы данных или полный запрос, поэтому мне нечего вам показать. Вы хотите написать что-то вроде:
Это вернет непредсказуемый (но не «случайный») набор строк. Если вы хотите сделать его предсказуемым, добавьте
ORDER BY
ответ Клодальдо. Если вы хотите сделать его по-настоящему случайным, вы захотитеORDER BY random()
.источник
источник
GROUP BY
предложение.