Ich habe eine Tabelle auf pgsql mit Namen (mit mehr als 1 Million Zeilen), aber ich habe auch viele Duplikate. Ich wähle drei Felder: id
, name
, metadata
.
Ich möchte sie zufällig mit ORDER BY RANDOM()
und auswählen LIMIT 1000
, daher sind dies viele Schritte, um Speicherplatz in meinem PHP-Skript zu sparen.
Aber wie kann ich das tun, damit ich nur eine Liste ohne Duplikate in den Namen bekomme?
Zum Beispiel [1,"Michael Fox","2003-03-03,34,M,4545"]
wird zurückgegeben, aber nicht [2,"Michael Fox","1989-02-23,M,5633"]
. Das Namensfeld ist das wichtigste und muss bei jeder Auswahl in der Liste eindeutig sein. Es muss zufällig sein.
Ich habe es mit versucht GROUP BY name
, aber dann erwartet es, dass ich ID und Metadaten auch in der GROUP BY
oder in einer Aggragate-Funktion habe, aber ich möchte nicht, dass sie irgendwie gefiltert werden.
Weiß jemand, wie man viele Spalten abruft, aber nur eine Spalte unterscheidet?
quelle
order by name
erforderlich? Würde es mit ein anderes Ergebnis bringenorder by col1
?name
ist notwendig. Überprüfen Siedistinct on
im Handbuch.Sie wollen die
DISTINCT ON
Klausel .Sie haben keine Beispieldaten oder eine vollständige Abfrage angegeben, sodass ich Ihnen nichts zeigen kann. Sie möchten etwas schreiben wie:
Dies gibt einen unvorhersehbaren (aber nicht "zufälligen") Satz von Zeilen zurück. Wenn Sie es vorhersehbar machen möchten, fügen Sie eine
ORDER BY
Antwort pro Clodaldo hinzu. Wenn Sie es wirklich zufällig machen wollen, werden Sie wollenORDER BY random()
.quelle
quelle
GROUP BY
Klausel enthalten sind.