2017-10-04 2 views
1

Gibt es eine Art "Aggregat" -Funktion in SQL, die nur Werte in eine Liste verwandelt? Ein Beispiel könnte eine Tabelle der Form sein:SQL-Gruppenwerte für eine Spalte durch eine andere Spalte

| game_id | player | score | 
|---------|--------|-------| 
| 1  | fred | 2  | 
| 1  | tom | 1  | 
| 2  | fred | 3  | 
| 2  | tom | 4  | 

Was würde ich wieder wie ein Tisch ist, der wie folgt aussieht:

| player | scores | 
|--------|--------| 
| fred | 2, 3 | 
| tom | 1, 4 | 

Der Befehl könnte wie etwas aussehen: SELECT player, listify(score) FROM games GROUP BY player;

+0

Markieren Sie die Frage mit der von Ihnen verwendeten Datenbank. Besser noch, Sie können nur Google " group_concat". 'group_concat()' ist die Funktion in MySQL und es gibt viele Antworten auf Fragen, wie man ähnliche Funktionen in anderen Datenbanken bekommt. –

+0

Die Antwort hängt vollständig von der Datenbank ab, die Sie verwenden. Verwenden Sie MySQL, SQL Server, Oracle oder etwas anderes? –

Antwort

1

Danke an Tim und Gordon. Die Postgres-Funktion, die ich suche, ist array_agg. Die vollständige Abfrage in diesem Fall wie folgt aussieht:

SELECT player, array_to_string(array_agg(score), ',') AS scores FROM games GROUP BY player; 

array_agg alle Noten in ein Array bringt, und man muss sich in einen String umwandeln zu können, um sie in einer SELECT-Anweisung zurückzukehren.

Verwandte Themen