[英]Max and Distinct SQL query
set search_path = 'project';
select g.firstname,g.lastname, g.rating, sh.showname
from guest g, shows sh, timeslot ts
where sh.shownumber = ts.shownumber
and ts.guestnumber = g.guestnumber
order by sh.showname
這是結果
"Charlie ";"Sheen";7.2;"Cooking Show"
"Charlie";"Sheen";7.2;"Cooking Show"
"Carl";"Makky";7.0;"Cooking Show"
"Barack";"Obama";6.7;"Fitness Mania"
"Vladimir";"Putin";8.2;"Fitness Mania"
"kim";"jung";5.3;"Fitness Mania"
"kim";"jung";5.3;"Gamers Heaven"
"Justin";"Trudeau";8.5;"Kids Play Time"
"Charlie";"Sheen";7.2;"Kids Play Time"
"ellen";"page";9.2;"Weather News"
我想要的是PER SHOW收視率最高的嘉賓,因此它應該有5條記錄,每個收視率最高的嘉賓的演出都有一條記錄
這是row_number()
函數的一個很好的應用程序:
select firstname, lastname, rating, showname
from (select g.firstname, g.lastname, g.rating, sh.showname,
row_number() over (partition by sh.showname order by g.rating desc) as seqnum
from guest g shows sh join
timeslot ts
on sh.shownumber = ts.shownumber join
guest g
on ts.guestnumber = g.guestnumber
) gr
where seqnum = 1
order by showname;
我還修改了代碼以使用顯式join
語法。
如果每個節目要五位客人,請使用seqnum <= 5
。
如果每個節目只需要一位客人-您可以使用DISTINCT ON
:
select distinct on (sh.showname) g.firstname, g.lastname, g.rating, sh.showname
from guest g, shows sh, timeslot ts
where sh.shownumber = ts.shownumber
and ts.guestnumber = g.guestnumber
order by sh.showname, g.rating desc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.