按列分组以获取Postgresq中的数组结果

2024-09-29 22:36:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为moviegenre的表,它看起来像:

moviegenre:
- movie (FK movie.id)
- genre (FK genre.id)

我有一个查询(ORM generated),它返回所有movie.imdb和{},它们与给定的movie.imdb_id具有相同的genre.id。在

^{pr2}$

问题是,我将得到以下格式的结果:

[
  ('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

Tags: inidifresultcommonmovieitemresults
2条回答

我希望python代码足够快:

movielist = [
  ('imdbid22', 'genreid1'),
  ('imdbid22', 'genreid2'),
  ('imdbid44, 'genreid1'),
  ('imdbid55', 'genreid8'),
]
dict = {}
for items in movielist:
    if dict[items[0]] not in dict:
        dict[items[0]] = items[1]
    else:
        dict[items[0]] = dict[items[0]].append(items[1])        
print dict

输出:

^{pr2}$

如果你只需要电影名,数数: 在原始查询中更改此项,您将得到不需要python代码的答案

SELECT "movie"."imdb_id", count("moviegenre"."genre_id")

group by "movie"."imdb_id"

select m.imdb_id, array_agg(g.genre_id) as genre_id
from
    moviegenre g
    inner join 
    movie m on g.movie_id = m.id
where 
    m.last_ingested_on is not null 
    and not m.imdb_id in ('tt0169547')  
    and not m.imdb_id in ('tt0169547')
    and g.genre_id in (2, 10) 
group by m.imdb_id

array_agg将创建一个包含某个imdb_id的所有genre_ids的数组:

http://www.postgresql.org/docs/current/interactive/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE

相关问题 更多 >

    热门问题