2017-03-01 248 views
3

中的字符串我與PostgreSQL的工作,我有一個這樣的表:SQL - 按字母順序排序的列

Group | Name 
====================================== 
1  | Mary 
2  | Barry,Ann,Peter 
3  | Max,Chris 
4  | Richard,Mary,Peter,Oliver 

表是一個例子,你可以考慮將有超過10000名不同的名字,名稱的一組最大數目爲4

我想每個字母組內排序的名稱,這樣的結果會是這樣:

Group | Name 
====================================== 
1  | Mary 
2  | Ann,Barry,Peter 
3  | Chris,Max 
4  | Mary,Peter,Oliver,Richard 

感謝

+5

正常化您的數據,因此您不會在單個列中存儲多個值,並且可以使用簡單的ORDER BY執行此操作。如果您選擇將數據存儲在以逗號分隔的列表中,則希望每次使用時都必須加倍努力。正確的方法是在三個單獨的行中有'2 Barry','2 Ann','2 Peter',這將使查詢成爲'ORDER BY Group,Name'。 –

+1

「name」,「text」或「text []」是什麼類型? – kennytm

+0

@kennytm名稱的類型是文本 –

回答

0
SELECT t.Group, string_agg(n.names, ',' ORDER BY n.names) AS Name 
FROM my_table t, 
    regexp_split_to_table(t.Name, ',', 'g') n(names) 
GROUP BY 1 
ORDER BY 1;