我遇到了生成查询的麻烦,因为我是新手。
我有4张桌子:电影,收视率,校长和演员
电影表包括:tconst(一键),标题,开始年份
评级表包括:tconst(一键),平均评分,选民人数
演员表包括:演员姓名,出生年份,死亡年份,nconst(一键)
principal表是一个联结表:nconst,tconst
我想创建一个表格,其中一列可以是电影的一年,第二列是当年发行的所有电影,第三列是所有演员在该年之后出生的
我使用了查询
SELECT
movies.start_year,
array_agg(DISTINCT(actors.name)) AS actors_born_after,
array_agg(movies.title) AS movies_title,
array_agg(DISTINCT(actors.birth_year))
FROM movies
INNER JOIN principals on movies.tconst=principals.tconst
INNER JOIN actors on principals.nconst=actors.nconst
WHERE actors.birth_year > movies.start_year
GROUP BY movies.start_year
limit 5;
但这似乎不起作用。
答案 0 :(得分:0)
尝试一下:
SELECT
movies.start_year,
movies_agg.movies_title,
array_agg(DISTINCT(actors.name)) actors_born_after -- Get list of actors
FROM movies
LEFT JOIN (
SELECT start_year, array_agg(DISTINCT(title)) AS movies_title -- Get all movies per each year
FROM movies a
GROUP BY start_year
) AS movies_agg ON movies.start_year = movies_agg.start_year -- Get list of movies from same year
LEFT JOIN actors ON actors.birth_year > movies.start_year -- Get all actors born after movie start_year
GROUP BY movies.start_year, movies_agg.movie_titles
这应该给你:
我还没有测试过,所以您可能会遇到一些语法错误。试一试,让我知道。