所以我的代码是试图计算每个州给一部电影的评分数。这一切都很简单。我还需要计算每个州获奖电影的评分数量。
SELECT DISTINCT ad.state "State",
COUNT(r.ratingid) OVER (PARTITION BY ad.state) "Number of Ratings",
COUNT(
SELECT DISTINCT r.ratingid
FROM netflix.ratings100 r JOIN netflix.movies_awards a
ON r.movieid = a.movieid
JOIN netflix.addresses ad
ON ad.custid = r.custid
WHERE a.awardid IS NOT NULL
) OVER (PARTITION BY ad.state) "Number of Award Winning Movies Rated"
FROM netflix.addresses ad JOIN netflix.ratings100 r
ON ad.custid = r.custid
JOIN netflix.movies_awards a
ON r.movieid = a.movieid
GROUP BY "State"
第二个计数语句应该计算奖励ID不为空的评分数。该子查询单独工作,并返回不同的ratingID,但整体上的东西不起作用。我得到了ORA-00936:缺少表情。溶液
答案 0 :(得分:1)
这似乎是一个复杂的查询。这应该是一个聚合查询。 。 。使用相关子查询:
SELECT ad.state, COUNT(DISTINCT r.ratingId) as num_rated,
COUNT(DISTINCT CASE WHEN a.awardId IS NOT NULL THEN r.ratingid END) as num_rated_with_award
FROM netflix.addresses ad JOIN
netflix.ratings100 r
ON ad.custid = r.custid LEFT JOIN
netflix.movies_awards a
ON r.movieid = a.movieid
GROUP BY ad.state;
注意:
as "State"
是不必要的,除非你真的关心大写。count(distinct)
。SELECT DISTINCT
几乎不适用于GROUP BY
。答案 1 :(得分:0)
你没有在子查询周围加上括号 - 你有括号来表示计数,但是你需要一个额外的集合来表示它是一个子查询。
E.g;
count( (select ....) ) over ...
此外,您在内部查询中重复使用外部查询中的别名,而且没有任何内容可以将子查询与您的外部查询相关联,因此我不会认为您是'重新获得你之后的结果。
此外,您已标记了一个标识符超过30个字符的列,因此,除非您使用扩展标识符设置在12.2上,否则您将获得{{\ n} 1}}。
最后,我认为你根本不需要那个子查询;我想你可以使用条件计数,例如:
ORA-00972: identifier is too long
你可能甚至不需要那么明显;这取决于你的数据。希望你能够解决这个问题并使其符合你的要求。