2011-12-25 11 views
87

mam a table jak: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 | 

Próbowałem 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 | 
+-----------+-------------------+-----------------------------+ 

Ale chcę dostać poglądy w porządku, jak:

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

Czy wartości wyświetleń i procentów w tabeli są przechowywane jako wartości rozdzielone przecinkami? – Virendra

+0

Nie są one przechowywane w ten sposób, ale zrobiłem je za pomocą mojego zapytania, tj. Z group_concat – ronquiq

+0

możliwy duplikat wartości [MySQL: Sort GROUP \ _CONCAT] (http://stackoverflow.com/questions/995373/mysql-sort- group-concat-values) – outis

Odpowiedz

194

Można użyć ORDER BY wewnątrz funkcji GROUP_CONCAT w ten sposób:

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

nie powinno to być 'group_concat (li.percentage ORDER BY li.views ASC)' tak, aby wartości procentowe wypadły w kolejności, która pasuje do widoków, zgodnie z żądaniem oryginalnego postu? –

+0

@aleroot, Czy jest to zapytanie specyficzne dla MySQL? – Pacerier

+0

Tak, GROUP_CONCAT jest funkcją tylko MySQL, jednak podobny wynik można osiągnąć w innej bazie danych z funkcją zastępczą ... – aleroot

0

W IMPALA, brak zlecenia w GROUP_CONCAT może być problematyczny w Coders'Co. mamy na to jakiś sposób obejścia (potrzebujemy go dla Rax/Impala). Jeśli potrzebujesz wyniku GROUP_CONCAT z klauzulą ​​ORDER BY w IMPALA, spójrz na ten wpis na blogu: http://raxdb.com/blog/sorting-by-regex/