2011-12-25 20 views
87

he a table como:GROUP_CONCAT ORDER BY

+-----------+-------+------------+ 
| client_id | views | percentage | 
+-----------+-------+------------+ 
|   1 |  6 |   20 | 
|   1 |  4 |   55 | 
|   1 |  9 |   56 | 
|   1 |  2 |   67 | 
|   1 |  7 |   80 | 
|   1 |  5 |   66 | 
|   1 |  3 |   33 | 
|   1 |  8 |   34 | 
|   1 |  1 |   52 | 

me trataron group_concat:

SELECT li.client_id, group_concat(li.views) AS views, 
group_concat(li.percentage) FROM li GROUP BY client_id; 

+-----------+-------------------+-----------------------------+ 
| client_id | views    | group_concat(li.percentage) | 
+-----------+-------------------+-----------------------------+ 
|   1 | 6,4,9,2,7,5,3,8,1 | 20,55,56,67,80,66,33,34,52 | 
+-----------+-------------------+-----------------------------+ 

Pero quiero conseguir los puntos de vista en orden, como:

+-----------+-------------------+----------------------------+ 
| client_id | views    | percentage     | 
+-----------+-------------------+----------------------------+ 
|   1 | 1,2,3,4,5,6,7,8,9 | 52,67,33,55,66,20,80,34,56 | 
+-----------+-------------------+----------------------------+ 
+2

son los valores de las vistas y el porcentaje de la tabla almacenados como valores separados por comas? – Virendra

+0

No, no están almacenados así, pero los hice por mi consulta, es decir, con group_concat – ronquiq

+0

posible duplicado de [MySQL: Sort GROUP \ _CONCAT values] (http://stackoverflow.com/questions/995373/mysql-sort- group-concat-values) – outis

Respuesta

194

Puede utilizar ORDER BY dentro de la función GROUP_CONCAT de esta manera:

SELECT li.client_id, group_concat(li.percentage ORDER BY li.views ASC) AS views, 
group_concat(li.percentage ORDER BY li.percentage ASC) 
FROM li GROUP BY client_id 
+10

¿No debería ser 'group_concat (li.percentage ORDER BY li.views ASC)' para que los porcentajes aparezcan en el orden que coincida con las vistas, tal como lo solicitó la publicación original? –

+0

@aleroot, ¿Es esta consulta específica de MySQL? – Pacerier

+0

Sí, GROUP_CONCAT es una función solo de MySQL, sin embargo, se puede obtener un resultado similar en otra base de datos con una función sustituta ... – aleroot

0

En IMPALA, no tener orden en GROUP_CONCAT puede ser problemático en Coders'Co. tenemos algún tipo de solución para eso (lo necesitamos para Rax/Impala). Si necesita el resultado GROUP_CONCAT con una cláusula ORDER BY en IMPALA, eche un vistazo a esta publicación del blog: http://raxdb.com/blog/sorting-by-regex/