GROUP_CONCAT ORDER BY


137

Ich habe einen Tisch wie:

+-----------+-------+------------+
| 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 |

Ich habe versucht 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  |
+-----------+-------------------+-----------------------------+

Aber ich möchte die Ansichten in Ordnung bringen, wie:

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

2
Werden die Werte von Ansichten und Prozent in der Tabelle als durch Kommas getrennte Werte gespeichert?
Virendra

Nein, sie werden nicht so gespeichert, aber ich habe sie durch meine Abfrage erstellt, dh mit group_concat
ronquiq

Mögliches Duplikat von MySQL: GROUP_CONCAT-Werte
sortieren

Antworten:


304

Sie können ORDER BYdie GROUP_CONCATFunktion folgendermaßen verwenden:

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
Sollte es nicht group_concat(li.percentage ORDER BY li.views ASC)so sein, dass die Prozentsätze in der Reihenfolge angezeigt werden, die den Ansichten entspricht, wie im ursprünglichen Beitrag gefordert?
Kai Carver

@aleroot, Ist diese Abfrage MySQL-spezifisch?
Pacerier

Ja, GROUP_CONCAT ist eine reine MySQL-Funktion, jedoch kann ein ähnliches Ergebnis in einer anderen Datenbank mit einer
Ersatzfunktion

2
Wenn Sie group_concat nach demselben Ausdruck wie group_concat () bestellen, können Sie einfach schreiben group_concat(li.views ORDER BY 1). Am einfachsten!
Doin

1
falls Sie auch Trennzeichen verwenden: SELECT GROUP_CONCAT(CONCAT(u.RegionName,'-',u.UserName) ORDER BY u.RegionName SEPARATOR '@@')
Himalaya Garg



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.