2010-09-13 9 views
12

así que tengo 5 filas como estecombinar varias filas en una plaza de cadena separada

userid, col 
-------------- 
1, a 
1, b 
2, c 
2, d 
3, e 

¿Cómo puedo hacer la consulta por lo que se verá así

userid, combined 
1, a b 
2, c d 
3, e 
+0

duplicado casi exacta de: http://stackoverflow.com/questions/2885709/sql-concatenate-rows-query –

Respuesta

13

Uso del GROUP_CONCAT aggregate function:

SELECT yt.userid, 
     GROUP_CONCAT(yt.col SEPARATOR ' ') AS combined 
    FROM YOUR_TABLE yt 
GROUP BY yt.userid 

El separador predeterminado es una coma (","), por lo que debe especificar el SEPARADOR de un solo espacio para obtener la salida que deseas.

Si desea garantizar el orden de los valores en la GROUP_CONCAT, utilice:

SELECT yt.userid, 
     GROUP_CONCAT(yt.col ORDER BY yt.col SEPARATOR ' ') AS combined 
    FROM YOUR_TABLE yt 
GROUP BY yt.userid 
+0

soy Actualmente estoy usando Hive, así que no puedo hacer el grupo por partes porque GROUP_CONCAT no se reconoce como una función de agregación, de todos modos alrededor de él. – haoxu

+0

@haoxu: La siguiente opción (desde una perspectiva SQL) sería una concatenación de cursor y cadena, pero requeriría una función MySQL. No estoy familiarizado con Hive, ¿no hay forma de utilizar una consulta nativa? –

+1

Presentó una solicitud JIRA para GROUP_CONCAT en HiveQL: https://issues.apache.org/jira/browse/HIVE-1689 –

-6

Estoy bastante seguro de que no se puede hacer esto utilizando la colmena QL. Sin embargo, debería ser posible hacerlo si escribe sus propias secuencias de comandos Mapa/Reducir; consulte this tutorial para comenzar.

+0

la respuesta está desactualizada. Las versiones más nuevas tienen las características. –

41

En colmena puede utilizar

SELECT userid, collect_set(combined) FROM tabel GROUP BY user_id; 

collect_set quita duplicado. Si necesita mantenerlas se puede comprobar este post:

COLLECT_SET() in Hive, keep duplicates?

+1

exactamente lo que quería! funciona como un encanto para concatenar una fila de un grupo por consulta –

2
SELECT 
    userid, 
    concat_ws(" ", collect_set(col)) AS combined 
FROM table 
GROUP BY userid 
Cuestiones relacionadas