GROUP_CONCAT ĐẶT HÀNG B BYNG


137

Tôi có một bảng như:

+-----------+-------+------------+
| 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 đã thử 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 lượt xem 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
các giá trị của lượt xem và tỷ lệ phần trăm trong bảng được lưu dưới dạng giá trị được phân tách bằng dấu phẩy?
Virendra

Không, chúng không được lưu trữ như vậy nhưng tôi đã thực hiện chúng bằng truy vấn của mình, ví dụ như với group_concat
ronquiq

có thể trùng lặp của MySQL: giá trị GROUP_CONCAT Sắp xếp
outis

Câu trả lời:


304

Bạn có thể sử dụng ORDER BYbên trong GROUP_CONCAThàm 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

11
không group_concat(li.percentage ORDER BY li.views ASC)nên để tỷ lệ phần trăm xuất hiện theo thứ tự phù hợp với lượt xem, theo yêu cầu của bài viết gốc?
Kai Carver

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

Có, GROUP_CONCAT là một chức năng duy nhất của MySQL, tuy nhiên có thể đạt được kết quả tương tự trên cơ sở dữ liệu khác với chức năng thay thế ...
thay đổi vào

2
Nếu sắp xếp nhóm_concat theo cùng một biểu thức bạn là group_concat () ing, bạn chỉ có thể viết group_concat(li.views ORDER BY 1). Dễ nhất!
Doin

1
trong trường hợp bạn cũng đang sử dụng dải phân cách: SELECT GROUP_CONCAT(CONCAT(u.RegionName,'-',u.UserName) ORDER BY u.RegionName SEPARATOR '@@')
Himalaya Garg



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.