рассчитать дисперсию весов всех игроков - PullRequest
0 голосов
/ 07 октября 2019

Нам даны данные из nba, где описание каждой таблицы выглядит следующим образом:

1) coaches_season, каждый кортеж которого описывает производительность одного тренера за один сезон; [cid, year, yr_order,year, season_win, season_loss, play_off_win, play_off_loss, tid]

2) команды, каждая группа которых дает основную информацию о команде;[tid, location, name, league]

3) игроков, каждый из которых дает основную информацию об одном игроке;[ilkid, имя, фамилия, позиция, first_season, last_season, h_feet, h_inches, вес, колледж, день рождения]

4) player_rs, каждый кортеж которого дает подробную производительность одного игрока в одном регулярном сезоне;[ilkid, tid, pts, asts, of, ftm, tpa, tpm, fgm, fga, fta, blk, обороты, stl, dreb, oreb, reb, минуты, gp, лига, фамилия, имя, год]

5) player_rs_career, каждый кортеж которого дает подробные результаты регулярного сезона одного игрока в его карьере; [ilkid, имя, фамилия, fga, fgm, fta, ftm, tpa, tpm, pf, stl, oreb,минуты, gp, dreb, asts, обороты, blk, reb, лига]

6) черновик, каждый кортеж которого показывает информацию о драфте НБА. [draft_year, имя, фамилия, draft_round, tid, selection, draft_from, ilkid, league]

Я нашел много запросов, но застрял с этими 3 запросами:

I) Для каждого колледжа выведитеназвание колледжа и среднее количество проектов (за сезон), которые они отправили в НБА. Однако сообщайте только о тех колледжах, которые прислали шашки не менее чем за 3 сезона.

II) Рассчитайте дисперсию весов всех игроков;

III) Напечатайте имена и фамилии тех, ктолибо набрал более 12000 очков в своей карьере, либо сыграл более 12 сезонов.

1 Ответ

1 голос
/ 08 октября 2019

Если вы хотите получить точный ответ, я советую вам следовать разделу справки по How-to-Ask . В этом случае особенно DDL для каждой таблицы, включая определения первичного и внешнего ключа. Также включите образцы данных в виде текста, а не изображения и ожидаемого вывода этих данных. Кроме того, в этом случае вы можете включить определения имен столбцов, поскольку не все знакомы с аббревиатурами, используемыми для NBA. С учетом сказанного я нанесу удар. Обратите внимание, поскольку вы не включили тестовые данные и определения таблиц, запросы НЕ были протестированы.

-- I)  For each college, print the college name and average number of drafts (per season) they sent to NBA. 
--     However, only report those colleges that sent drafts in at least 3 seasons.
-- assumptions: 
--    draft yr   integer specifying calendar year of draft
--    draft_from text    name of college
--    average number of drafts (per season)  ?? how many drafts are there per season
--                                           what is the difference between season and year  

with draft as
     (select max(draft_yr) dy from draft_year)
   , dy_last3 as
     (select distinct draft_from  df
        from draft_year
       where exists (select null from draft_year, draft where draft_yr = dy)
         and exists (select null from draft_year, draft where draft_yr = dy-1)
         and exists (select null from draft_year, draft where draft_yr = dy-2) 
     )      
 select draft_from, round(avg(drc),2) adv_drafts
   from (
         select draft_from, draft_yr, count(*) drc 
           from draft_year  
          where draft_from in (select df from dy_last3)
          group by draft_from,draft_yr
      ) t
 group by draft_from;   

-- II) Calculate the variance of the weights of all players;
-- assumption:  weight defined as float;

select var_samp(weight) from player;  
   OR 
select var_pop(weight) from player; 

-- III)Print the first and last names of those who either scored more than 12000 points in their careers or played for more than 12 seasons.
-- assumption fgm => field goals made  = 2 points each
--            ftm => free throws made  = 1 point  each
--            tpm => 3 point shot make = 3 points each
--            ilkid => Pk in player and FK in player_rs_career  
--            table player_rs_career does include last/current season
--            note player_rs_career does NOT contain year/season, unless hidden by undescribed column name

select distinct * 
  from (select p.firstname, p.lastname 
             , sum(ftm + (2*fgm) + (3*tpm)) over (partition by p.ilkid) points
             , (coalesce (p.last_season, extract (year from now())::integer) - p.first_season + 1) seasons 
          from player           p 
          join player_rs_career pc 
            on p.ilkid = pc.ilkid
       ) pp
  where points  > 12000
     or seasons > 12; 
...