返回列由2个其他列排序,条件为

时间:2018-05-18 11:05:16

标签: sql postgresql

我有一个DB,它只是一个包含3列的表: viewer_id,movie_id,排名 (整数)(整数)(文字)

此表中的某行表示某个观看者观看了某部电影。

  

如果观众尚未对电影进行排名,则排名值为NULL。

     

如果观众确实对电影进行排名而不是排名值   LIKE \不喜欢

我需要编写一个查询,返回前10个查看者ID,其中包含按视图计数排序的最高视图和评级计数 然后评分计数(均按降序排列)。

到目前为止,我编写了一个返回带有viewer_id,movie_watch_count的表的查询 有正确的信息。

   SELECT viewer_id , count(*) AS movies_watched 
   FROM viewers_movies_rankings  
   Group By viewer_id 

我尝试在此表中添加另一列 - “ranking_count”,它将为每个viewer_id计算排名值!= null的行数。 (这样我也可以获得观众排名的电影数量, 因此,在此之后唯一要做的就是按那些列进行排序)

但我写的一切都行不通。 例如(不工作)

SELECT viewer_id , count(*) AS movies_watched,
COUNT(*) AS movies_watched 
HAVING ranking != null 
FROM viewers_movies_rankings  
Group By viewer_id 

你能帮助我吗?

2 个答案:

答案 0 :(得分:1)

你似乎想要:

COUNT(<expression>)

NULL计算表达式不是SELECT viewer_id, COUNT(*) AS movies_watched, COUNT(ranking) AS ranking_count FROM viewers_movies_rankings GROUP BY viewer_id 的次数 - 这正是您想要做的。

答案 1 :(得分:1)

这是你想要的吗?

COUNT

NULL函数的默认行为是它只计算非grep option1 m | cut -d "=" -f2 | awk '{$1=$1};1' 值。