2017-03-01 229 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;