Sql 聚合前未对联接表中的ORDER BY值进行分组

Sql 聚合前未对联接表中的ORDER BY值进行分组,sql,postgresql,Sql,Postgresql,我试图根据数组\聚合函数对Postgres结果集进行排序 我有一个非常有效的查询: 选择a.id、a.name、array\u agg(f.name) 演员a 在a.id=actor\u id上加入actor\u films af 在胶片上连接胶片f\u id=f.id 按a.id分组 a.id订购; 这给了我以下结果,例如: id | name | array_agg ----+--------+---------------------------------

我试图根据数组\聚合函数对Postgres结果集进行排序

我有一个非常有效的查询:

选择a.id、a.name、array\u agg(f.name)
演员a
在a.id=actor\u id上加入actor\u films af
在胶片上连接胶片f\u id=f.id
按a.id分组
a.id订购;
这给了我以下结果,例如:

 id |  name  |            array_agg
----+--------+---------------------------------
  1 | bob    | {"delta force"}
  2 | joe    | {"delta force","the funny one"}
  3 | fred   | {"bad movie",AARRR}
  4 | sally  | {"the funny one"}
  5 | suzzy  | {"bad movie","delta force"}
  6 | jill   | {AARRR}
  7 | victor | {"the funny one"}
我想对结果进行排序,以便按电影名称的字母顺序进行排序。例如,最终订单应为:

 id |  name  |            array_agg
----+--------+---------------------------------
  3 | fred   | {"bad movie",AARRR}
  6 | jill   | {AARRR}
  5 | suzzy  | {"bad movie","delta force"}
  1 | bob    | {"delta force"}
  2 | joe    | {"delta force","the funny one"}
  4 | sally  | {"the funny one"}
  7 | victor | {"the funny one"}
这是基于他们所演电影的字母名称。当我添加按f.name排序的
时,我得到以下错误:

错误:“f.name”列必须出现在GROUP BY子句中,或在聚合函数中使用

我无法将其添加到组中,因为我需要将其聚合到数组中,并且我希望对预聚合进行排序,以便获得以下顺序。这可能吗


如果您想重现此示例,以下是设置代码:

创建表参与者(id序列主键,名称文本);
创建表胶片(id序列主键,名称文本);
创建表actor_films(actor_id int references actors(id),film_id int references film(id));
在演员(姓名)值中插入('bob')、('joe')、('fred')、('sally')、('suzzy')、('jill')、('victor');
在电影中插入(名称)值('aarr')、('TheFromy one')、('bad movie')、('delta force');
在演员电影(演员id,电影id)中插入值(2,2)、(7,2)、(4,2)、(2,4)、(1,4)、(5,4)、(6,1)、(3,1)、(3,3)、(5,3);
以及带有错误的最终查询:

选择a.id、a.name、array\u agg(f.name)
演员a
在a.id=actor\u id上加入actor\u films af
在胶片上连接胶片f\u id=f.id
按a.id分组
按f.名称、a.id订购;

您可以使用聚合功能:

order by min(f.name), a.id

我不知道您可以在文本字段上使用
min
。谢谢你,这似乎毫无意义。由于阵列中有多个胶片名称,您想按哪个名称订购?