Mam tabelę na pgsql z nazwami (mającą więcej niż 1 mln wierszy), ale mam też wiele duplikatów. I wybrać 3 pola: id
, name
, metadata
.
Chcę je wybierać losowo za pomocą ORDER BY RANDOM()
i LIMIT 1000
, więc robię to wiele kroków, aby zaoszczędzić trochę pamięci w moim skrypcie PHP.
Ale jak mogę to zrobić, aby uzyskać tylko listę, która nie ma duplikatów w nazwach.
Na przykład [1,"Michael Fox","2003-03-03,34,M,4545"]
zostanie zwrócony, ale nie [2,"Michael Fox","1989-02-23,M,5633"]
. Pole nazwy jest najważniejsze i musi być unikalne na liście za każdym razem, gdy dokonuję wyboru, i musi być losowe.
Próbowałem z GROUP BY name
, ale oczekuje, że będę mieć identyfikator i metadane GROUP BY
również lub w funkcji agregującej, ale nie chcę, aby były w jakiś sposób filtrowane.
Każdy wie, jak pobrać wiele kolumn, ale tylko wyróżnić jedną kolumnę?
źródło
order by name
wymagane? Czy przyniosłoby to inny wynikorder by col1
?name
jest konieczne. Sprawdźdistinct on
w instrukcji.Chcesz się
DISTINCT ON
klauzulę .Nie podałeś przykładowych danych ani pełnego zapytania, więc nie mam Ci nic do pokazania. Chcesz napisać coś takiego:
Spowoduje to zwrócenie nieprzewidywalnego (ale nie „losowego”) zestawu wierszy. Jeśli chcesz, aby było przewidywalne, dodaj odpowiedź
ORDER BY
według Clodaldo. Jeśli chcesz, aby było to naprawdę losowe, będziesz chciałORDER BY random()
.źródło
źródło
GROUP BY
klauzuli.