对于SQL查询中的每个ID,MAX(COUNT(*))

时间:2015-04-04 23:15:24

标签: sql postgresql

我需要一些使用PostgreSQL 9.4的SQL查询帮助。

我需要在每个本地拍摄最多的电影,这是我要求选择的数据

  • 电影名称
  • 本地ID
  • 租金数

表格:

rental(idMovie, idLocal, idClient)
movies(idMovie, title, description, year)

这就是我所做的,但不是我被要求做的事。

SELECT m.tile, m.year, r.idLocal, COUNT(*) AS cont
FROM rental r, movies m
WHERE m.idMovie=r.idMovie
GROUP BY r.idLocal, m.title, m.year
ORDER BY COUNT(*) DESC;

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你想要的是为每个地点展示出租最多的电影。

如果是这种情况,那么您可以使用像rank()这样的窗口功能,它会根据每个位置的租借数量为所有电影分配排名编号。 where子句然后过滤掉排名最高的电影(当然可以有多个电影共享榜首)。

select m.title, m.year, r.idLocal, r.rents
from movies m 
join (
  select 
    idMovie, 
    idlocal,
    count(idmovie) rents,
    rank() over (
      partition by idlocal 
      order by count(idmovie) desc
    ) rn
  from rental 
  group by idMovie, idLocal
) r on m.idMovie = r.idMovie 
where rn = 1
order by idlocal;

Sample SQL Fiddle

答案 1 :(得分:0)

试试这个......

SELECT r.idLocal, m.title, m.year, count(r.idMovie) as count_movie
FROM rental r, movies m
WHERE m.idMovie=r.idMovie
GROUP BY r.idLocal, m.title, m.year
ORDER BY count_movie DESC;

或者

SELECT r.idLocal, m.title, m.year, count(r.idMovie) as count_movie
FROM rental r, movies m
WHERE m.idMovie=r.idMovie
GROUP BY r.idLocal, m.title, m.year
ORDER BY count(r.title) DESC;