SQL запрос, чтобы получить предмет с максимальным баллом - PullRequest
0 голосов
/ 19 марта 2020
name    subject classroom   Total_Score  term   session 
jane     eng     phase1      79          1      2016/2017
jane     math    phase1      56          1      2016/2017
jane     eng     phase1      98          2      2016/2017
jane     math    phase1      87          2      2016/2017
jack     eng     phase1      94          1      2016/2017
jack     math    phase1      45          1      2016/2017
jack     eng     phase1      79          2      2016/2017
jack     math    phase1      89          2      2016/2017
jane     eng     phase2      55          1      2017/2018
jane     math    phase2      37          1      2017/2018
jack     math    phase2      45          1      2017/2018
jack     eng     phase2      59          2      2017/2018

Привет, у меня есть этот стол, и я пытаюсь получить предмет, студент получил максимальную оценку за семестр и сессию. Ожидаемый результат должен выглядеть следующим образом:

name   subject   classroom  max_score  term     session
jane     eng     phase1      79          1      2016/2017
jane     eng     phase1      98          2      2016/2017
jack     eng     phase1      94          1      2016/2017
jack     math    phase1      89          2      2016/2017
jane     eng     phase2      55          1      2017/2018
jack     eng     phase2      59          2      2017/2018

Я пробовал следующий запрос

SELECT
  distinct name, subject, classroom, max(Total_Score), term, session
FROM
  ranktable
 group by name, classroom, term, session, subject
 order by term

, но он не возвращает желаемый результат. Я буду признателен за любую помощь, которую я могу получить. Я относительно новичок в SQL

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

Решением для кросс-баз данных является фильтрация с коррелированным подзапросом:

select t.*
from mytable t
where t.total_score = (
    select max(t1.total_score)
    from mytable t1
    where 
        t1.name = t.name 
        and t1.term = t.term 
        and t1.session = t.session
)

Это дает вам строку с максимальным баллом за name, term и session.

1 голос
/ 19 марта 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY Total_Score DESC LIMIT 1)[OFFSET(0)] 
FROM `project.dataset.table` t
GROUP BY name, classroom, term, session
...