So habe ich 5 Zeilen wie diesemehrere Zeilen in einem Raum getrennt String Kombinieren
userid, col
--------------
1, a
1, b
2, c
2, d
3, e
Wie würde ich Abfrage tun, damit es wie diese
userid, combined
1, a b
2, c d
3, e
So habe ich 5 Zeilen wie diesemehrere Zeilen in einem Raum getrennt String Kombinieren
userid, col
--------------
1, a
1, b
2, c
2, d
3, e
Wie würde ich Abfrage tun, damit es wie diese
userid, combined
1, a b
2, c d
3, e
Verwenden Sie die GROUP_CONCAT aggregate function aussehen:
SELECT yt.userid,
GROUP_CONCAT(yt.col SEPARATOR ' ') AS combined
FROM YOUR_TABLE yt
GROUP BY yt.userid
Das Standardtrennzeichen ist ein Komma (","), so dass Sie den SEPARATOR eines einzelnen Platzes angeben müssen die Ausgabe, die Sie wünschen.
Wenn Sie die Reihenfolge der Werte in der GROUP_CONCAT sicherstellen wollen, verwenden Sie:
SELECT yt.userid,
GROUP_CONCAT(yt.col ORDER BY yt.col SEPARATOR ' ') AS combined
FROM YOUR_TABLE yt
GROUP BY yt.userid
Ich bin verwende ich jetzt Hive, also kann ich die Gruppe für Teile nicht tun, weil GROUP_CONCAT nicht als Aggregationsfunktion erkannt wird, egal um welche herum? – haoxu
@haoxu: Die nächste Option (aus einer SQL-Perspektive) wäre eine Cursor- und String-Verkettung, aber es würde eine MySQL-Funktion erfordern. Ich bin nicht vertraut mit Hive - gibt es keine Möglichkeit, eine native Abfrage zu verwenden? –
Eine JIRA-Anfrage für GROUP_CONCAT in HiveQL abgelegt: https://issues.apache.org/jira/browse/HIVE-1689 –
Ich bin ziemlich sicher, dass Sie dies mit Hive QL nicht tun können. Dies sollte jedoch möglich sein, wenn Sie eigene Map/Reduce-Skripte schreiben - siehe this tutorial, um loszulegen.
Antwort ist veraltet. Neuere Versionen haben die Funktionen. –
Im Bienenstock können Sie verwenden
SELECT userid, collect_set(combined) FROM tabel GROUP BY user_id;
collect_set duplizierten entfernt. Wenn Sie sie behalten möchten, können Sie diesen Beitrag überprüfen:
genau was ich wollte! funktioniert wie ein Zauber, um eine Reihe aus einer Gruppe nach Abfrage zu erstellen –
SELECT
userid,
concat_ws(" ", collect_set(col)) AS combined
FROM table
GROUP BY userid
Fast exakte Kopie von: http://stackoverflow.com/questions/2885709/sql-concatenate-rows-query –