Sql 聚合前未对联接表中的ORDER BY值进行分组
我试图根据数组\聚合函数对Postgres结果集进行排序 我有一个非常有效的查询: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 ----+--------+---------------------------------
选择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
。谢谢你,这似乎毫无意义。由于阵列中有多个胶片名称,您想按哪个名称订购?