2011-12-25 33 views
87

Tôi đã a table như: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 | 

tôi đã cố gắng 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 | 
+-----------+-------------------+-----------------------------+ 

Nhưng tôi muốn để có được các quan điểm theo thứ tự, như:

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

là giá trị của lượt xem và phần trăm trong bảng được lưu trữ dưới dạng giá trị được phân tách bằng dấu phẩy không? – Virendra

+0

Không, chúng không được lưu trữ như vậy nhưng tôi đã tạo chúng theo truy vấn của tôi, với group_concat – ronquiq

+0

bản sao có thể có của [MySQL: Sort GROUP \ _CONCAT values] (http://stackoverflow.com/questions/995373/mysql-sort- nhóm-concat-giá trị) – outis

Trả lời

194

Bạn có thể sử dụng ORDER BY bên trong GROUP_CONCAT chức năng theo cách này:

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

không nên là 'group_concat (li.percentage ORDER BY li.views ASC)' để tỷ lệ phần trăm đi ra theo thứ tự khớp với các lượt xem, theo yêu cầu của bài đăng gốc? –

+0

@aleroot, Truy vấn này có phải là MySQL cụ thể không? – Pacerier

+0

Có, GROUP_CONCAT là một hàm chỉ MySQL, tuy nhiên kết quả tương tự có thể đạt được trên cơ sở dữ liệu khác với hàm thay thế ... – aleroot

0

Ở IMPALA, không có đơn đặt hàng trong GROUP_CONCAT có thể có vấn đề, tại Coders'Co. chúng tôi có một số giải pháp cho việc đó (chúng tôi cần nó cho Rax/Impala). Nếu bạn cần kết quả GROUP_CONCAT với mệnh đề ORDER BY trong IMPALA, hãy xem bài đăng trên blog này: http://raxdb.com/blog/sorting-by-regex/