我有一个名为moviegenre
的表,它看起来像:
moviegenre:
- movie (FK movie.id)
- genre (FK genre.id)
我有一个查询(ORM generated),它返回所有movie.imdb
和{movie.imdb_id
具有相同的genre.id
。在
问题是,我将得到以下格式的结果:
[
('imdbid22`, 'genreid1'),
('imdbid22`, 'genreid2'),
('imdbid44`, 'genreid1'),
('imdbid55`, 'genreid8'),
]
在查询本身中,是否有一种方法可以将所有类型id分组到movie.imdb_id
下的一个列表中?我想在查询中进行分组。
目前在我的web应用程序代码(Python)中执行,当返回50k+行时,速度非常慢。在
[
('imdbid22`, ['genreid1', 'genreid2']),
('imdbid44`, 'genreid1'),
('imdbid55`, 'genreid8'),
]
提前谢谢!在
编辑:
下面是针对当前结果运行的python代码
结果列表=[]
for item in movies_and_genres:
genres_in_common = len(set([
i['genre__id'] for i in movies_and_genres
if i['movie__imdb_id'] == item['movie__imdb_id']
]))
imdb_id = item['movie__imdb_id']
if genres_in_common >= min_in_comon:
result_item = {
'movie.imdb_id': imdb_id,
'count': genres_in_common
}
if result_item not in results_list:
results_list.append(result_item)
return results_list
我希望python代码足够快:
输出:
^{pr2}$如果你只需要电影名,数数: 在原始查询中更改此项,您将得到不需要python代码的答案
SELECT "movie"."imdb_id", count("moviegenre"."genre_id")
group by "movie"."imdb_id"
array_agg
将创建一个包含某个imdb_id
的所有genre_ids
的数组:http://www.postgresql.org/docs/current/interactive/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE
相关问题 更多 >
编程相关推荐