我需要一些使用PostgreSQL 9.4的SQL查询帮助。
我需要在每个本地拍摄最多的电影,这是我要求选择的数据
表格:
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;
答案 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;
答案 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;