簡體   English   中英

最大和不同的SQL查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM